官方文件:
Spring Boot使用Commons Logging進行所有內部日誌記錄,但保留底層日誌實現。為Java Util Logging,Log4J2和 Logback提供了預設配置 。在不同情況下,記錄器都預先配置為使用控制檯輸出,並且還提供可選的檔案輸出。
預設情況下,如果使用“Starters”,則使用Logback進行日誌記錄。還包括適當的Logback路由,以確保使用Java Util Logging,Commons Logging,Log4J或SLF4J的依賴庫都能正常工作。
日誌格式
Spring Boot的預設日誌輸出類似於以下示例:
2014-03-05 10:57:51.112 INFO 45469 --- [main] org.apache.catalina.core.StandardEngine:啟動Servlet引擎:Apache Tomcat / 7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] oaccC [Tomcat]。[localhost]。[/]:初始化Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] osweb .context.ContextLoader:Root WebApplicationContext:初始化完成時間為1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] osbceServletRegistrationBean:對映servlet:'dispatcherServlet'到[/]
2014-03 -05 10:57:51.702 INFO 45469 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean:對映過濾器:'hiddenHttpMethodFilter'為:[/ *]
複製程式碼
Logback是沒有FATAL級別的日誌,它將被對映到ERROR
- 時間日期:精確到毫秒,可以用於排序
- 日誌級別:ERROR、WARN、INFO、DEBUG、TRACE
- 程式ID
- 分隔符:採用 --- 來標識日誌開始部分
- 執行緒名:方括號括起來(可能會截斷控制檯輸出)
- Logger名:通常使用原始碼的類名
- 日誌內容:我們輸出的訊息
控制檯輸出
日誌級別從低到高分為:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
複製程式碼
如果設定為WARN ,則低於WARN的資訊都不會輸出。
Spring Boot中預設配置ERROR、WARN和INFO級別的日誌輸出到控制檯。
您還可以通過啟動您的應用程式 --debug 標誌來啟用“除錯”模式(開發的時候推薦開啟),以下兩種方式皆可:
在執行命令後加入--debug標誌,如:$ java -jar springTest.jar --debug,這種命令會被 SpringBoot 解析,且優先順序最高
在application.properties中配置debug=true,該屬性置為true的時候,核心Logger(包含嵌入式容器、hibernate、spring)會輸出更多內容,但是你自己應用的日誌並不會輸出為DEBUG級別。
啟用除錯模式時,將配置一些核心記錄器(嵌入式容器、 Hibernate 和 Spring Boot)來輸出更多的資訊。 啟用除錯模式不會將應用程式配置為以 DEBUG 級別登入所有訊息。
或者,你也可以通過使用 --trace標誌(或application.properties中的trace=true)啟用“trace”模式。這樣做可以為選擇的核心記錄器進行跟蹤日誌記錄(嵌入式容器,Hibernate資料庫生成和整個Spring 組合)。
彩色編碼輸出
如果你的終端支援ANSI,顏色輸出用於幫助可讀性。你可以在配置 檔案中設定spring.output.ansi.enabled 來改變。 比如:
spring.output.ansi.enabled=always
複製程式碼
- ALWAYS: 啟用 ANSI 顏色的輸出。
- DETECT: 嘗試檢測 ANSI 著色功能是否可用。
- NEVER: 禁用 ANSI 顏色的輸出。
顏色編碼是通過使用% clr 轉換字來配置的。 在最簡單的形式中,轉換器根據日誌級別對輸出進行顏色設定,如下面的示例所示:
%clr(%5p)
複製程式碼
下表描述了將日誌級別對映為顏色的情況:
Level | color |
---|---|
FATAL | Red |
ERROR | Red |
WARN | Yellow |
INFO | Green |
DEBUG | Green |
TRACE | Green |
或者,你可以指定應該使用的顏色或樣式,將其作為轉換的選項。例如,為了使文字黃色,使用下 面的設定:
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
複製程式碼
支援以下顏色和風格:
- blue
- cyan
- faint
- green
- magenta
- red
- yellow
檔案輸出
預設情況下,Spring Boot 只會將日誌記錄到控制檯上,而不會寫日誌檔案。 如果你希望除了控制檯輸出之外編寫日誌檔案,你需要設定一個logging.file件或 logging.path 屬性(例如在你的application.properties)。
logging.file | logging.path | Example | Description |
---|---|---|---|
none | none | 控制檯只記錄日誌 | |
特定檔案 | none | my.log | 寫入指定的日誌檔案。名字可以是工作目錄的確切位置或相對位置 |
noen | 特定目錄 | /var/log | 寫入spring.log到指定的目錄。名字可以是工作目錄的確切位置或相對位置 |
日誌檔案在達到 10MB 時進行切割,與控制檯輸出一樣,產生一個新的日誌檔案(如:spring.1.log、spring.2.log),新的日誌依舊輸出到 spring.log 中去,預設情況下會記錄 ERROR、WARN、INFO 級別訊息。
你可以通過設定logging.file.max大小的屬性來改變日誌檔案的大小限制。以前切割的檔案會被無限期存檔,除非已經設定了logging.file.max歷史屬性
注:logging.file和logging.path二者不能同時使用,如若同時使用,則只有logging.file生效
日誌系統是在應用程式生命週期的早期初始化的。 因此,在通過@propertysource 註釋載入的屬性檔案中找不到日誌屬性。
日誌記錄屬性獨立於實際的日誌基礎結構。 因此,spring Boot 不管理特定的配置鍵(如 Logback.configurationFile for Logback)。
日誌輸出級別
所有支援的日誌記錄系統可以通過使用logging.level.<包名或Logger名>=<日誌級別>在Spring環境中設定日誌記錄器級別(例如,在application.properties中),其級別可以是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF任意一個。root記錄器可以通過使用logging.level.root進行配置。
下面的示例顯示了在application.properties中配置。
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
複製程式碼
自定義日誌配置
你可以使用org.springframework.boot.logging.LoggingSystem系統屬性強制Spring Boot使用特定的日誌記錄系統。 該值應該是LoggingSystem實現的完全限定類名。 您還可以使用none值完全禁用Spring Boot的日誌記錄配置。
因為日誌記錄是在建立ApplicationContext之前初始化的,所以無法控制Spring@Configuration檔案中的@PropertySources的日誌記錄。更改日誌記錄系統或完全禁用日誌記錄的唯一方法是通過系統屬性。
根據你的日誌記錄系統,將載入以下檔案:
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
在可能的情況下,我們建議你使用 -spring來進行日誌配置(例如:logback-spring.xml而不是logback.xml)。如果使用logback.xml,Spring無法完全控制日誌初始化。
為了幫助進行自定義,Spring環境將一些其他屬性轉移到System屬性,如下表所述:
Spring Environment | System Property | Comments |
---|---|---|
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | 記錄異常時使用的轉換詞。 |
logging.file | LOG_FILE | 將日誌寫入到指定的檔案中,預設為相對路徑,可以設定成絕對路徑 |
logging.file.max-size | LOG_FILE_MAX_SIZE | 最大日誌檔案大小(如果啟用了日誌檔案)。 (只支援預設的 Logback 設定。) |
logging.file.max-history | LOG_FILE_MAX_HISTORY | 需要儲存的存檔日誌檔案的最大數量(如果啟用了日誌檔案)。 (只支援預設的 Logback 設定。) |
logging.path | LOG_PATH | 將名為 spring.log 寫入到指定的 資料夾 中,如(/var/log) |
logging.pattern.console | CONSOLE_LOG_PATTERN | 在控制檯上使用的日誌模式(stdout)。 (只支援預設的 Logback 設定。) |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | 設定日誌輸出日期格式(只支援預設的 Logback 設定。) |
logging.pattern.file | FILE_LOG_PATTERN | 定義輸出到日誌檔案的日誌格式 |
logging.pattern.level | LOG_LEVEL_PATTERN | 繪製日誌級別時使用的格式 |
PID | PID | 當前的程式ID |
如果你想在日誌屬性中使用佔位符,則應使用 Spring Boot 的語法,而不是基礎框架的語法。 值得注意的是,如果使用Logback,你應該使用 : 作為屬性名和其預設值之間的分隔符,而不是使用 :-。
Logback擴充套件配置
Spring Boot 包含了一些 Logback 擴充套件,這些擴充套件可以幫助提高配置。 您可以在 logback-spring.xml 配置檔案中使用這些擴充套件。 由於標準logback.xml配置檔案過早載入,所以不能在其中使用擴充套件。您需要使用logback- spring.xml,或者定義一個loggingconfig屬性。
擴充套件配置不能與Logback的配置掃描一起使用。 如果嘗試這樣做,對配置檔案進行更改會導致類似以下記錄之一的錯誤:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
複製程式碼
springProperty
<springProfile> 標籤使我們讓配置檔案更加靈活,它可以選擇性的包含或排除部分配置。
<springProfile name="dev">
<!-- 開發環境時啟用 -->
</springProfile>
<springProfile name="dev,test">
<!-- 開發,測試的時候啟用,多個環境用逗號隔開-->
</springProfile>
<springProfile name="!prod">
<!-- 當 "生產" 環境時,該配置不啟用-->
</springProfile>
複製程式碼
例子:
<!-- 測試環境+開發環境. 多個使用逗號隔開. -->
<springProfile name="test,dev">
<logger name="com.example.demo.controller" level="DEBUG" additivity="false">
<appender-ref ref="consoleLog"/>
</logger>
</springProfile>
<!-- 生產環境. -->
<springProfile name="prod">
<logger name="com.example.demo.controller" level="INFO" additivity="false">
<appender-ref ref="consoleLog"/>
</logger>
</springProfile>
複製程式碼
後端一枚,默默搬磚擼程式碼,如果覺得不錯歡迎關注我的公眾號