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.522014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms2014-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:ideaProjectsSpringBootDemolog1mylog1.log # 設定日志輸出路徑,預設會生成log/spring.log日志檔案 path: log
application.properties中設定:
logging.file=log/my.loglogging.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=DEBUGlogging.level.root=INFO說明:配置日志級别值大小寫均可,例如:設定成debug/info
刨根問底,死磕自己(選看)
1. 日志級别設定選項
源碼中系統日志級别是個枚舉類,列出了所有日志級别,如下截圖:
根據在application.yml中設定的LEVEL值,比對系統日志枚舉類,最終設定系統相應包下的日志級别。
關注我:私信回複“555”擷取往期Java進階架構資料、源碼、筆記、視訊Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發等架構技術往期架構視訊截圖