Spring boot 使用Logback列印日誌
Logback是什麼
Logback是由log4j創始人設計的又一個開源日誌元件,它的使用非常簡單靈活,是目前主流的日誌記錄工具。
slf4j log4j logback關係
籠統的講就是slf4j是一系列的日誌介面,而log4j logback是具體實現了的日誌框架。官網文件中有一句話明確描述了三者的關係:slf4j譯為簡單日誌門面,實現了日誌框架一些通用的api,log4j和logback是具體的日誌框架
logback的優勢
log4j和logback都是出自Ceki Gülcü之手,而logback相對於log4j來說更新一點。無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進,但是兩者的用法幾乎差別不大。下面是logback的優勢:
- 更快的執行速度
- 充分的測試
- logback-classic 非常自然的實現了SLF4J
- 豐富的擴充套件文件
- 可以使用使用XML配置檔案或者Groovy
- 自動重新載入配置檔案
- 優雅地從I/O錯誤中恢復
- 自動清除舊的日誌歸檔檔案
- 自動壓縮歸檔日誌檔案
預設情況下,Spring Boot會用Logback來記錄日誌,並用INFO級別輸出到控制檯
使用logbacck
使用logbak我們無需引入依賴,因為spring-boot-starter中包含了 spring-boot-starter-logging,該依賴內容就是 Spring Boot 預設的日誌框架 logback。
logbak的日誌級別從低到高分為:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
如果設定為 WARN則低於WARN的資訊都不會輸出。
Spring Boot中預設配置ERROR、WARN和INFO級別的日誌輸出到控制檯
自定義日誌配置
在resources目錄下使用如下檔名就能被spring boot掃描到
logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Spring Boot官方推薦優先使用帶有-spring的檔名作為你的日誌配置(如使用logback-spring.xml,而不是logback.xml),如果想自定義檔名,可以通過logging.config屬性指定自定義的名字:
logging.config=classpath:my-logging-config.xml
在resources目錄中新建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--檔案儲存在專案根目錄的log資料夾中-->
<property name="log.path" value="log" />
<!--輸出到控制檯-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!--輸出到檔案-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--日誌輸出-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- logback:包路徑 -->
<logger name="me.zhengjie.app.rest" level="WARN" additivity="false"/>
<!--logback:類的全路徑 -->
<logger name="me.zhengjie.app.rest.UserController" level="WARN" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
節點介紹可以參考Albin 的文章:logback節點配置詳解
啟動專案效果如下
優化顯示效果
修改節點中的內容,修改如下
<encoder>
<pattern>%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)</pattern>
<charset>utf-8</charset>
</encoder>
啟動專案,檢視效果
多環境日誌輸出
據不同環境(prod:生產環境,test:測試環境,dev:開發環境)來定義不同的日誌輸出,在 logback-spring.xml中使用 springProfile 節點來定義,方法如下:
檔名稱不是logback.xml,想使用spring擴充套件profile支援,要以logback-spring.xml命名
<!-- 測試環境+開發環境. 多個使用逗號隔開 -->
<springProfile name="test,dev">
<logger name="me.zhengjie.app.rest" level="info" />
</springProfile>
<!-- 生產環境. -->
<springProfile name="prod">
<logger name="me.zhengjie.app.rest" level="ERROR" />
</springProfile>
可以啟動服務的時候指定 profile (如不指定使用預設)
指定prod 的方式為:
java -jar xxx.jar –spring.profiles.active=prod
在類中使用
程式碼中使用日誌只需要類裡面新增如下程式碼即可
private Logger logger = LoggerFactory.getLogger(this.getClass());
專案原始碼
github:https://github.com/dqjdda/SpringBoot_All
碼雲:https://gitee.com/hgpt/SpringBoot_All
開源後臺管理系統:
歡迎體驗Aurora
github: https://github.com/dqjdda/Aurora