SpringBoot使用logback實現日誌按天滾動
阿新 • • 發佈:2019-01-03
需求
那有的同學要問了,不能這樣寫嗎
<level>INFO</level>
這樣不是隻攔截INFO日誌了嗎?
不對!
這就得說一下日誌級別了
DEBUG ->INFO -> WARN ->ERROR
如果你設定的日誌級別是INFO,那麼是會攔截ERROR日誌的哦。
- 日誌按天滾動分割
- info和error日誌輸出到不同檔案
在這裡,我不去深究的討論各個日誌框架的優劣,網上的對比文章實在太多了。我只說以下幾點理由。
- Logback是Log4j的升級版,作者為同一個人,作者不想再去改Log4j,所以寫了Logbak
- 使用日誌框架的最佳實踐是選擇一款日誌門面+一款日誌實現,這裡選擇Slf4j+Logback, Slf4j作者也是Logbak的作者
- SpringBoot從1.4版本開始,內建的日誌框架就是Logback
可以直接在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裡做了如下過濾
上述程式碼翻譯之後:攔截ERROR級別的日誌。如果匹配到了,則禁用處理。如果不匹配,則接受,開始處理日誌。<?xml version="1.0"?> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch>
那有的同學要問了,不能這樣寫嗎
<level>INFO</level>
這樣不是隻攔截INFO日誌了嗎?
不對!
這就得說一下日誌級別了
DEBUG ->INFO -> WARN ->ERROR
如果你設定的日誌級別是INFO,那麼是會攔截ERROR日誌的哦。