本章從第4章開始
4. Logging
Spring Boot使用Commons Logging進(jìn)行所有內(nèi)部日志記錄,但保留底層日志實(shí)現(xiàn)開放。為Java Util Logging、Log4J2和Logback提供了默認(rèn)配置。在每種情況下,記錄器都預(yù)先配置為使用控制臺(tái)輸出和可選的文件輸出。
默認(rèn)情況下,如果您使用“starter”,則使用Logback進(jìn)行日志記錄。還包括適當(dāng)?shù)腖ogback路由,以確保使用Java Util Logging、Commons Logging、Log4J或SLF4J的依賴庫(kù)都能正確工作。
Java有很多可用的日志框架。如果上面的列表看起來令人困惑,不要擔(dān)心。一般來說,您不需要更改日志依賴項(xiàng),Spring Boot默認(rèn)值也可以正常工作。
當(dāng)將應(yīng)用程序部署到servlet容器或應(yīng)用程序服務(wù)器時(shí),使用Java Util logging API執(zhí)行的日志記錄不會(huì)路由到應(yīng)用程序的日志中。這可以防止容器或已部署到容器的其他應(yīng)用程序執(zhí)行的日志記錄出現(xiàn)在應(yīng)用程序的日志中。
4.1. Log Format
Spring Boot的默認(rèn)日志輸出類似如下示例:
2023-10-28 18:53:33.562 INFO 21592 --- [nio-3344-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-10-28 18:53:33.562 INFO 21592 --- [nio-3344-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-10-28 18:53:33.563 INFO 21592 --- [nio-3344-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Logback沒有致命級(jí)別。它被映射到ERROR。
4.2. Console Output
默認(rèn)日志配置在寫入消息時(shí)將消息回顯到控制臺(tái)。缺省情況下,日志記錄級(jí)別為ERROR-level、WARN-level和INFO-level。您還可以通過使用——debug標(biāo)志啟動(dòng)應(yīng)用程序來啟用“調(diào)試”模式。
類似于:
$ java -jar myapp.jar --debug
又或者,在配置文件中寫入:
debug=true
當(dāng)啟用調(diào)試模式時(shí),將配置一些核心日志記錄器(嵌入式容器、Hibernate和Spring Boot)以輸出更多信息。啟用調(diào)試模式不會(huì)將應(yīng)用程序配置為以debug級(jí)別記錄所有消息。
或者,您可以通過使用——trace標(biāo)志啟動(dòng)應(yīng)用程序來啟用“跟蹤”模式(或在application.properties中使用trace=true)。這樣做可以對(duì)選定的核心記錄器(嵌入式容器、Hibernate模式生成和整個(gè)Spring組合)進(jìn)行跟蹤日志記錄。
4.2.1. Color-coded Output
如果您的終端支持ANSI,則使用顏色輸出來提高可讀性。您可以將spring.output.ansi.enabled設(shè)置為支持的值以覆蓋自動(dòng)檢測(cè)。
使用%clr轉(zhuǎn)換字配置顏色編碼。在其最簡(jiǎn)單的形式中,轉(zhuǎn)換器根據(jù)日志級(jí)別為輸出著色,如下例所示:
%clr(%5p)
日志級(jí)別與顏色的對(duì)應(yīng)關(guān)系如下表所示:
Level | Color |
---|---|
|
Red |
|
Red |
|
Yellow |
|
Green |
|
Green |
|
Green |
4.3. File Output
默認(rèn)情況下,Spring Boot只記錄到控制臺(tái),不寫日志文件。如果除了控制臺(tái)輸出之外還想寫入日志文件,則需要設(shè)置logging.file.name或logging.file.path屬性(例如,在application.properties中)。
下表顯示了如何進(jìn)行日志記錄。*屬性可以一起使用:
logging.file.name |
logging.file.path |
Example | Description |
---|---|---|---|
(none) |
(none) |
Console only logging. |
|
Specific file |
(none) |
|
Writes to the specified log file. Names can be an exact location or relative to the current directory. |
(none) |
Specific directory |
|
Writes? |
日志文件在達(dá)到10 MB時(shí)輪換,并且與控制臺(tái)輸出一樣,默認(rèn)情況下記錄錯(cuò)誤級(jí)別、警告級(jí)別和info級(jí)別的消息。
日志記錄屬性獨(dú)立于實(shí)際的日志記錄基礎(chǔ)設(shè)施。因此,特定的配置鍵(如logback。配置文件Logback)不是由spring Boot管理的。
4.4. File Rotation
如果您正在使用Logback,則可以使用您的應(yīng)用程序?qū)θ罩据啌Q設(shè)置進(jìn)行微調(diào)。屬性或應(yīng)用程序。yaml文件。對(duì)于所有其他日志系統(tǒng),您需要自己直接配置旋轉(zhuǎn)設(shè)置(例如,如果您使用Log4J2,那么您可以添加一個(gè)Log4J2 .xml或Log4J2 -spring.xml文件)。
支持以下旋轉(zhuǎn)策略屬性:
Name | Description |
---|---|
|
The filename pattern used to create log archives. |
|
If log archive cleanup should occur when the application starts. |
|
The maximum size of log file before it is archived. |
|
The maximum amount of size log archives can take before being deleted. |
|
The maximum number of archive log files to keep (defaults to 7). |
4.5. Log Levels
所有支持的日志系統(tǒng)都可以通過使用logging.level在Spring環(huán)境中(例如,在application.properties中)設(shè)置日志記錄器級(jí)別。<logger-name>=<level>,其中l(wèi)evel是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF中的一個(gè)。可以使用logging.level.root配置根記錄器。
下面的例子顯示了application.properties中可能的日志設(shè)置:
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
也可以使用環(huán)境變量設(shè)置日志記錄級(jí)別。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG將org.springframework.web設(shè)置為DEBUG。
4.6. Log Groups
能夠?qū)⑾嚓P(guān)的記錄器分組在一起,以便可以同時(shí)配置它們,這通常是很有用的。例如,您可能經(jīng)常更改所有與Tomcat相關(guān)的日志記錄器的日志級(jí)別,但是您不容易記住頂級(jí)包。
為了幫助實(shí)現(xiàn)這一點(diǎn),Spring Boot允許您在Spring環(huán)境中定義日志組。例如,下面是你如何通過將“tomcat”組添加到application.properties中來定義它:
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
一旦定義,你可以用一行改變組中所有記錄器的級(jí)別:
PropertiesYaml
logging.level.tomcat=trace
Spring Boot包括以下可以開箱即用的預(yù)定義日志組:
Name | Loggers |
---|---|
web |
|
sql |
|
4.7. Using a Log Shutdown Hook
為了在應(yīng)用程序終止時(shí)釋放日志資源,提供了一個(gè)關(guān)機(jī)鉤子,該鉤子將在JVM退出時(shí)觸發(fā)日志系統(tǒng)清理。這個(gè)關(guān)閉鉤子是自動(dòng)注冊(cè)的,除非您的應(yīng)用程序作為war文件部署。如果您的應(yīng)用程序具有復(fù)雜的上下文層次結(jié)構(gòu),那么shutdown鉤子可能無法滿足您的需求。如果沒有,禁用shutdown鉤子,并研究底層日志系統(tǒng)直接提供的選項(xiàng)。例如,Logback提供上下文選擇器,允許在自己的上下文中創(chuàng)建每個(gè)Logger。您可以使用日志記錄。
logging.register-shutdown-hook=false
4.8. Custom Log Configuration
可以通過在類路徑中包含適當(dāng)?shù)膸?kù)來激活各種日志記錄系統(tǒng),還可以通過在類路徑的根目錄或由以下Spring Environment屬性指定的位置提供合適的配置文件來進(jìn)一步定制日志記錄系統(tǒng):logging.config。
你可以通過使用org.springframework.boot.logging.LoggingSystem系統(tǒng)屬性強(qiáng)制Spring Boot使用特定的日志系統(tǒng)。該值應(yīng)該是LoggingSystem實(shí)現(xiàn)的完全限定類名。您還可以通過使用一個(gè)值完全禁用Spring Boot的日志配置
因?yàn)槿罩居涗浭窃贏pplicationContext創(chuàng)建之前初始化的,所以不可能從Spring @Configuration文件中的@PropertySources控制日志記錄。更改日志系統(tǒng)或完全禁用它的唯一方法是通過系統(tǒng)屬性。
根據(jù)您的日志系統(tǒng),將加載以下文件:
Logging System | Customization |
---|---|
Logback |
|
Log4j2 |
|
JDK (Java Util Logging) |
|
如果可能,我們建議您在日志配置中使用-spring變量(例如,logback-spring.xml而不是logback.xml)。如果使用標(biāo)準(zhǔn)配置位置,Spring不能完全控制日志初始化。
Java Util Logging有一些已知的類加載問題,在從“可執(zhí)行jar”運(yùn)行時(shí)會(huì)導(dǎo)致問題。如果可能的話,我們建議您在從“可執(zhí)行jar”運(yùn)行時(shí)避免使用它。
為了幫助進(jìn)行定制,將一些其他屬性從Spring環(huán)境轉(zhuǎn)移到System屬性。這允許記錄系統(tǒng)配置使用屬性。例如,在應(yīng)用程序中設(shè)置logging.file.name。屬性或LOGGING_FILE_NAME作為環(huán)境變量將導(dǎo)致設(shè)置LOG_FILE System屬性。傳輸?shù)膶傩匀缦卤硭?
Spring Environment | System Property | Comments |
---|---|---|
|
|
The conversion word used when logging exceptions. |
|
|
If defined, it is used in the default log configuration. |
|
|
If defined, it is used in the default log configuration. |
|
|
The log pattern to use on the console (stdout). |
|
|
Appender pattern for log date format. |
|
|
The charset to use for console logging. |
|
|
The log pattern to use in a file (if? |
|
|
The charset to use for file logging (if? |
|
|
The format to use when rendering the log level (default? |
|
|
The current process ID (discovered if possible and when not already defined as an OS environment variable). |
如果使用Logback,還會(huì)傳輸以下屬性:
Spring Environment | System Property | Comments |
---|---|---|
|
|
Pattern for rolled-over log file names (default? |
|
|
Whether to clean the archive log files on startup. |
|
|
Maximum log file size. |
|
|
Total size of log backups to be kept. |
|
|
Maximum number of archive log files to keep. |
所有支持的日志系統(tǒng)在解析配置文件時(shí)都可以參考System屬性。參見spring-boot.jar中的默認(rèn)配置示例:
-
Logback
-
Log4j 2
-
Java Util logging
如果你想在日志屬性中使用占位符,你應(yīng)該使用Spring Boot的語(yǔ)法,而不是底層框架的語(yǔ)法。值得注意的是,如果使用Logback,應(yīng)該使用:作為屬性名與其默認(rèn)值之間的分隔符,而不是使用:-。
您可以通過僅覆蓋LOG_LEVEL_PATTERN(或使用Logback覆蓋logging.pattern.level)將MDC和其他特別內(nèi)容添加到日志行。例如,如果您使用logging.pattern。level=user:%X{user} %5p,則默認(rèn)日志格式中包含“user”的MDC條目,如果存在,如下例所示。
2019-08-30 12:30:04.031 user:someone INFO 22174 --- [ nio-8080-exec-0] demo.Controller
Handling authenticated request
4.9. Logback Extensions
Spring Boot包括許多Logback擴(kuò)展,可以幫助進(jìn)行高級(jí)配置。您可以在logback-spring.xml配置文件中使用這些擴(kuò)展名。
因?yàn)闃?biāo)準(zhǔn)的logback.xml配置文件加載得太早,所以不能在其中使用擴(kuò)展。您需要使用logback-spring.xml或定義一個(gè)日志記錄。配置屬性。
擴(kuò)展不能與Logback的配置掃描一起使用。如果您嘗試這樣做,對(duì)配置文件進(jìn)行更改會(huì)導(dǎo)致類似于以下錯(cuò)誤之一的錯(cuò)誤記錄:
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]]
4.9.1. Profile-specific Configuration
<springProfile>標(biāo)簽允許您選擇性地包含或排除基于活動(dòng)Spring配置文件的配置部分。在<configuration>元素中的任何地方都支持配置文件節(jié)。使用name屬性指定哪個(gè)概要文件接受配置。<springProfile>標(biāo)記可以包含一個(gè)概要名稱(例如staging)或一個(gè)概要表達(dá)式。概要表達(dá)式允許表達(dá)更復(fù)雜的概要邏輯,例如production & (eu-central | eu-west)。查看參考指南了解更多細(xì)節(jié)。下面的清單顯示了三個(gè)樣例配置文件:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
4.9.2. Environment Properties
<springProperty>標(biāo)記允許您公開Spring環(huán)境中的屬性,以便在Logback中使用。如果希望訪問應(yīng)用程序中的值,這樣做可能很有用。屬性文件中的Logback配置。該標(biāo)記的工作方式類似于Logback的標(biāo)準(zhǔn)<property>標(biāo)記。但是,不是直接指定值,而是指定屬性的來源(來自環(huán)境)。如果需要將屬性存儲(chǔ)在局部作用域以外的地方,可以使用scope屬性。如果需要一個(gè)回退值(如果沒有在環(huán)境中設(shè)置屬性),可以這樣做。文章來源:http://www.zghlxwxcb.cn/news/detail-718455.html
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
源必須以kebab的形式指定(例如my.property-name)。但是,可以通過使用寬松的規(guī)則將屬性添加到環(huán)境中。文章來源地址http://www.zghlxwxcb.cn/news/detail-718455.html
到了這里,關(guān)于SpringCore完整學(xué)習(xí)教程4,入門級(jí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!