一、 概述
Spring Boot 對所有内部日志記錄使用 Commons Logging,但使底層日志實作保持打開狀态。 為 Java Util Logging、Log4j2 和 Logback 提供了預設配置。 在每種情況下,記錄器都預先配置為使用控制台輸出,并提供可選的檔案輸出。
預設情況下,如果您使用“初學者”,則使用登入進行日志記錄。 還包括适當的 Logback 路由,以確定使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依賴庫都能正常工作。
二、日志格式
Spring Boot的預設日志輸出類似于以下示例:
2023-02-23T14:18:26.407Z INFO 20239 --- [ main] o.s.b.d.f.s.MyApplication : Starting MyApplication using Java 17.0.6 with PID 20239 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2023-02-23T14:18:26.414Z INFO 20239 --- [ main] o.s.b.d.f.s.MyApplication : No active profile set, falling back to 1 default profile: "default"
2023-02-23T14:18:28.434Z INFO 20239 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-02-23T14:18:28.563Z INFO 20239 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-02-23T14:18:28.563Z INFO 20239 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.5]
2023-02-23T14:18:28.976Z INFO 20239 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-02-23T14:18:28.990Z INFO 20239 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2444 ms
2023-02-23T14:18:32.397Z INFO 20239 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-02-23T14:18:32.438Z INFO 20239 --- [ main] o.s.b.d.f.s.MyApplication : Started MyApplication in 7.241 seconds (process running for 8.232)
- 輸出以下項目:
- 日期和時間:毫秒精度,易于排序。
- 日志級别:錯誤、警告、資訊、調試或跟蹤。
- 程序ID。
- 分隔符,用于區分實際日志消息的開頭。
- 線程名稱:用方括号括起來(對于控制台輸出,可以截斷)。
- 記錄器名稱:這通常是源類名(通常縮寫)。
- 日志消息。
三、控制台輸出
預設日志配置在寫入消息時将消息回顯到控制台。預設情況下,記錄ERROR級别、WARN級别和INFO級别消息。您還可以通過使用--debug标志啟動應用程式來啟用“調試”模式。
$ java -jar myapp.jar --debug
啟用調試模式後,将配置一組核心記錄器(嵌入式容器、Hibernate和Spring Boot)以輸出更多資訊。啟用調試模式不會将應用程式配置為使用debug級别記錄所有消息。
或者,您可以通過使用--trace标志啟動應用程式來啟用“跟蹤”模式(或在應用程式中使用trace=true。财産)。這樣可以為選擇的核心記錄器(嵌入式容器、Hibernate模式生成和整個Spring組合)啟用跟蹤日志記錄。
四、不同顔色編碼輸出
如果您的終端支援ANSI,則使用顔色輸出來提高可讀性。您可以将spring.output.ansi.enabled設定為支援的值,以覆寫自動檢測。
通過使用%clr轉換字配置顔色編碼。在最簡單的形式中,轉換器根據日志級别為輸出着色,如下例所示:
%clr(%5p)
下表描述了日志級别到顔色的映射:
Level | Color |
FATAL | Red |
ERROR | Red |
WARN | Yellow |
INFO | Green |
DEBUG | Green |
TRACE | Green |
或者,您可以通過将其作為轉換選項來指定應使用的顔色或樣式。例如,要使文本變為黃色,請使用以下設定:
%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}
支援以下顔色和樣式:
- blue
- cyan
- faint
- green
- magenta
- red
- yellow
五、檔案輸出
預設情況下,Spring Boot隻記錄到控制台,不寫入日志檔案。如果要在控制台輸出之外寫入日志檔案,則需要設定logging.file.name或logging.file.path屬性(例如,在application.properties中)。
下表顯示了logging.*财産如何一起使用:
表 8.日志記錄屬性
logging.file.name | logging.file.path | Example | Description |
(none) | (none) | 僅控制台日志記錄。 | |
Specific file | (none) | my.log | 寫入指定的日志檔案。 名稱可以是确切的位置,也可以是相對于目前目錄的位置。 |
(none) | Specific directory | /var/log | 将spring.log寫入指定目錄。名稱可以是确切的位置或相對于目前目錄。 |
日志檔案在達到10MB時會旋轉,與控制台輸出一樣,預設情況下會記錄ERROR級别、WARN級别和INFO級别的消息。
七、檔案轉換
如果使用Logback,則可以使用application.properties或application.yaml檔案微調日志輪換設定。對于所有其他日志記錄系統,您需要自己直接配置旋轉設定(例如,如果使用Log4j2,則可以添加Log4j2.xml或Log4j2-pring.xml檔案)。
支援以下輪換政策屬性:
名字 | 描述 |
logging.logback.rollingpolicy.file-name-pattern | 用于建立日志存檔的檔案名模式。 |
logging.logback.rollingpolicy.clean-history-on-start | 如果應在應用程式啟動時進行日志歸檔清理。 |
logging.logback.rollingpolicy.max-file-size | 日志檔案存檔前的最大大小。 |
logging.logback.rollingpolicy.total-size-cap | 日志存檔在删除之前可以采用的最大大小。 |
logging.logback.rollingpolicy.max-history | 要保留的最大歸檔日志檔案數(預設值為 7)。 |
八、日志級别
所有支援的日志記錄系統都可以通過使用logging.level.<logger-name>=<level>在Spring環境中設定日志記錄程式級别(例如,在application.properties中),其中級别是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF之一。根日志記錄程式可以通過使用日志記錄.level.root進行配置。
以下示例顯示application.properties中的潛在日志記錄設定:
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
還可以使用環境變量設定日志記錄級别。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG将ORG.SPRINGFRAMEWORK.WEB設定為DEBUG。
上述方法僅适用于包級日志記錄。由于寬松綁定總是将環境變量轉換為小寫,是以不可能以這種方式為單個類配置日志記錄。如果需要為類配置日志記錄,可以使用SPRING_APPLICATION_JSON變量。
九、日志組
能夠将相關的記錄器分組在一起,以便可以同時配置它們,這通常很有用。例如,您可能通常會更改所有Tomcat相關記錄器的日志記錄級别,但您不容易記住頂級包。
為了幫助實作這一點,Spring Boot允許您在Spring環境中定義日志組。例如,以下是如何通過将“tomcat”組添加到您的application.properties:
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
定義後,您可以使用單行更改組中所有記錄器的級别:
logging.level.tomcat=trace
Spring Boot包括以下預定義的日志記錄組,可以立即使用:
Name | Loggers |
web | org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql | org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener |
十、使用日志關閉鈎子
為了在應用程式終止時釋放日志資源,提供了一個在JVM退出時觸發日志系統清理的關閉挂鈎。除非将應用程式部署為war檔案,否則會自動注冊此關閉挂鈎。如果應用程式具有複雜的上下文層次結構,則關閉挂鈎可能無法滿足您的需要。如果沒有,請禁用關機挂鈎并調查底層日志系統直接提供的選項。例如,Logback提供了上下文選擇器,允許在自己的上下文中建立每個Logger。您可以使用logging.register-shutdown-hook屬性禁用關機挂鈎。将其設定為false将禁用注冊。您可以在application.properties或application.yaml檔案中設定屬性:
logging.register-shutdown-hook=false
十一、自定義日志配置
可以通過在類路徑中包含适當的庫來激活各種日志記錄系統,并且可以通過在路徑的根目錄中或在以下Spring Environment屬性指定的位置提供适當的配置檔案來進一步定制:logging.config。
通過使用org.springframework.Boot.logging.LoggingSystem系統屬性,可以強制Spring Boot使用特定的日志記錄系統。該值應該是LoggingSystem實作的完全限定類名。您還可以使用值none完全禁用Spring Boot的日志記錄配置。
根據您的日志記錄系統,将加載以下檔案:
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環境傳輸到系統财産,如下表所述:
Spring Environment | System Property | Comments |
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD | The conversion word used when logging exceptions. |
logging.file.name | LOG_FILE | If defined, it is used in the default log configuration. |
logging.file.path | LOG_PATH | If defined, it is used in the default log configuration. |
logging.pattern.console | CONSOLE_LOG_PATTERN | The log pattern to use on the console (stdout). |
logging.pattern.dateformat | LOG_DATEFORMAT_PATTERN | Appender pattern for log date format. |
logging.charset.console | CONSOLE_LOG_CHARSET | The charset to use for console logging. |
logging.pattern.file | FILE_LOG_PATTERN | The log pattern to use in a file (if LOG_FILE is enabled). |
logging.charset.file | FILE_LOG_CHARSET | The charset to use for file logging (if LOG_FILE is enabled). |
logging.pattern.level | LOG_LEVEL_PATTERN | The format to use when rendering the log level (default %5p). |
PID | PID | The current process ID (discovered if possible and when not already defined as an OS environment variable). |
如果使用 Logback,則還會傳輸以下屬性:
Spring Environment | System Property | Comments |
logging.logback.rollingpolicy.file-name-pattern | LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN | Pattern for rolled-over log file names (default ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz). |
logging.logback.rollingpolicy.clean-history-on-start | LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START | Whether to clean the archive log files on startup. |
logging.logback.rollingpolicy.max-file-size | LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE | Maximum log file size. |
logging.logback.rollingpolicy.total-size-cap | LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP | Total size of log backups to be kept. |
logging.logback.rollingpolicy.max-history | LOGBACK_ROLLINGPOLICY_MAX_HISTORY | Maximum number of archive log files to keep |
所有受支援的日志記錄系統在解析其配置檔案時都可以參考System财産。有關示例,請參見spring-bot.jar中的預設配置:
- Logback
- Log4j 2
- Java Util logging
大家好,我是Doker品牌的Sinbad,歡迎點贊和評論,您的鼓勵是我們持續更新的動力!更多資料請前往官網:Doker 多克