SpringBoot使用logback實現日誌按天滾動

需求

  1. 日誌按天滾動分割
  2. info和error日誌輸出到不同文件

為什麼使用Logback

在這裡,我不去深究的討論各個日誌框架的優劣,網上的對比文章實在太多了。我只說以下幾點理由。

  1. Logback是Log4j的升級版,作者為同一個人,作者不想再去改Log4j,所以寫了Logback
  2. 使用日誌框架的最佳實踐是選擇一款日誌門面+一款日誌實現,這裡選擇Slf4j+Logback, Slf4j作者也是Logbak的作者
  3. 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

  1. 因為要把info和error日誌輸入到不同文件, 所以我們分別建了兩個appender。
  2. rollingPolicy是滾動策略,這裡我們設置按時間滾動
  3. filter是日誌的過濾方式,我們在fileInfoLog里做了如下過濾

<level>ERROR</level>

<onMatch>DENY</onMatch>

<onMismatch>ACCEPT</onMismatch>

上述代碼翻譯之後:攔截ERROR級別的日誌。如果匹配到了,則禁用處理。如果不匹配,則接受,開始處理日誌。

那有的同學要問了,不能這樣寫嗎

<level>INFO</level>

這樣不是只攔截INFO日誌了嗎?

不對!

這就得說一下日誌級別了

DEBUG ->INFO -> WARN ->ERROR

如果你設置的日誌級別是INFO,那麼是會攔截ERROR日誌的哦。

作者: 廖師兄

鏈接:imooc.com/article/19005

來源:慕課網


推薦閱讀:

TAG:SpringBoot | 代碼 | 編程技巧 |