SpringBoot使用logback實現日誌按天滾動
需求
- 日誌按天滾動分割
- info和error日誌輸出到不同文件
為什麼使用Logback
在這裡,我不去深究的討論各個日誌框架的優劣,網上的對比文章實在太多了。我只說以下幾點理由。
- Logback是Log4j的升級版,作者為同一個人,作者不想再去改Log4j,所以寫了Logback
- 使用日誌框架的最佳實踐是選擇一款日誌門面+一款日誌實現,這裡選擇Slf4j+Logback, Slf4j作者也是Logbak的作者
- SpringBoot從1.4版本開始,內置的日誌框架就是Logback
Logback在SpringBoot中配置方式一
可以直接在applicatin.properties或者application.yml中配置
以在application.yml中配置為例logging: pattern: console: "%d - %msg%n" file: /var/log/tomcat/sell.log level: com.imooc.LoggerTest: debug
可以發現,這種配置方式簡單,但能實現的功能也很局限,只能
- 定製輸出格式
- 輸出文件的路徑
- 指定某個包下的日誌級別
如果需要完成我們的需求,這就得用第二種配置了
Logback在SpringBoot中配置方式二
在resource目錄下新建logback-spring.xml, 內容如下
<?xml version="1.0" encoding="UTF-8" ?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d - %msg%n </pattern> </layout> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑--> <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern> </rollingPolicy> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑--> <fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root></configuration>
每一個appender你可以理解為一個日誌處理策略。
第一個appender的name="consoleLog", 名字是自己隨意取的,取這個名字,表示這個策略用於控制台的日誌。我們重點看第二個和第三個appender
- 因為要把info和error日誌輸入到不同文件, 所以我們分別建了兩個appender。
- rollingPolicy是滾動策略,這裡我們設置按時間滾動
- filter是日誌的過濾方式,我們在fileInfoLog里做了如下過濾
<level>ERROR</level>
<onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch>上述代碼翻譯之後:攔截ERROR級別的日誌。如果匹配到了,則禁用處理。如果不匹配,則接受,開始處理日誌。
那有的同學要問了,不能這樣寫嗎
<level>INFO</level>
這樣不是只攔截INFO日誌了嗎?
不對!這就得說一下日誌級別了
DEBUG ->INFO -> WARN ->ERROR如果你設置的日誌級別是INFO,那麼是會攔截ERROR日誌的哦。
作者: 廖師兄
鏈接:https://www.imooc.com/article/19005
來源:慕課網
推薦閱讀:
TAG:SpringBoot | 代碼 | 編程技巧 |