SpringBoot使用Commons Logging進行所有內部日誌記錄,但保留底層日誌實現。預設提供了Java Util Logging,Log4j2和Logback日誌配置。在每種情況下,都預先配置為使用控制檯輸出,並且還提供了可選的檔案輸出。(來自官網)
日誌格式
SpringBoot預設的日誌輸出如下所示:
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
複製程式碼
輸出以下專案:
- 日期和時間:毫秒精度並且容易排序
- 日誌級別:ERROR, WARN, INFO, DEBUG, TRACE
- 程式ID
- --- 分隔符來區分實際日誌的開始
- 執行緒名:括在方括號中(可能會被截斷)
- 日誌記錄器名:這通常是源類名(通常縮寫)
- 日誌資訊
Logback中沒有FATAL(致命)級別,它被對映到ERROR級別
(日誌格式來自官網)
控制檯輸出
SpringBoot控制檯輸出預設支援三種日誌級別:ERROR,WARN和INFO
如果還想輸出別的級別日誌,例如DEBUG或TRACE(只能二選一),如下操作:
- 啟動應用程式時,增加--debug或--trace標誌
$ java -jar myapp.jar -- debug 說明:使用debug除錯模式啟動應用程式不會將應用程式配置為使用DEBUG級別記錄日誌。 複製程式碼
- 在application.yml中(或application.properties中)增加debug: true或trace: true(或debug=true/trace=true)
application.yml檔案:
debug: true 複製程式碼
application.properties檔案:
debug=true 複製程式碼
多彩輸出:
如果終端支援ANSI(表示顏色),可以設定彩色輸出。
application.yml中設定:
# 檢查終端是否支援ANSI,是的話就採用彩色輸出
spring:
output:
ansi:
enabled: detect
複製程式碼
application.properties中設定:
# 檢查終端是否支援ANSI,是的話就採用彩色輸出
spring.output.ansi.enabled=detect
複製程式碼
檔案輸出
SpringBoot預設配置日誌只會輸出到控制檯,並不會記錄到檔案中,但通常生產環境需要把日誌記錄到檔案中。
配置屬性如下:
- logging.file: 設定日誌輸出檔案,絕對路徑或相對路徑都可以。
- logging.path: 設定日誌輸出目錄,會在該目錄下建立spring.log檔案,並寫入日誌內容。
日誌檔案在達到10 MB時滾動輸出,並且與控制檯輸出一樣,預設情況下會記錄ERROR,WARN和INFO級別的日誌。可以使用logging.file.max-size屬性更改大小限制。除非已設定logging.file.max-history屬性,否則以前輪換的日誌檔案將被無限期歸檔。(來自官網)
注意點:
- 日誌記錄系統在應用程式生命週期的早期初始化。因此,在通過@PropertySource註解載入的屬性檔案中找不到日誌記錄屬性。
- 日誌記錄屬性獨立於實際的日誌記錄基礎結構。因此,SpringBoot不管理特定的配置金鑰(例如Logback的logback.configurationFile)。 (來自官網)
application.yml中設定:
logging:
# 設定相對路徑的日誌輸出檔案
file: log/my.log
# 設定日誌輸出路徑,預設會生成log/spring.log日誌檔案
path: log
logging:
# 設定絕對路徑的日誌輸出檔案
file: D:\ideaProjects\SpringBootDemo\log1\mylog1.log
# 設定日誌輸出路徑,預設會生成log/spring.log日誌檔案
path: log
複製程式碼
application.properties中設定:
logging.file=log/my.log
logging.path=log
複製程式碼
級別控制
配置屬性格式:logging.level.*=LEVEL
- logging.level: 日誌級別控制字首,*為包名或Logger名
- LEVEL: 選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
application.yml中設定:
logging:
level:
# com.example.demo包下所有class以DEBUG級別輸出
com.example.demo: DEBUG
# root日誌以INFO級別輸出
root: INFO
說明:
配置日誌級別值大小寫均可,例如:設定成debug/info
複製程式碼
application.properties中設定:
logging.level.com.example.demo=DEBUG
logging.level.root=INFO
說明:
配置日誌級別值大小寫均可,例如:設定成debug/info
複製程式碼
刨根問底,死磕自己(選看)
1. 日誌級別設定選項
原始碼中系統日誌級別是個列舉類,列出了所有日誌級別,如下截圖:
根據在application.yml中設定的LEVEL值,匹配系統日誌列舉類,最終設定系統相應包下的日誌級別。
SpringBoot官網: docs.spring.io/spring-boot…