原創作品,可以轉載,但是請標注出處地址:http://www.cnblogs.com/V1haoge/p/7613854.html
這是SpringBoot的日志內容
python日志?26 日志
Spring使用CommonLogging作為內置日志記錄工具,但也保留了底層日志的實現。默認的配置提供了Java Util Logging、Log4J2和LogBack。在不同情況下,可以通過預先的配置來選擇控制臺輸出或者文件輸出。
默認情況下,如果你使用了SpringBoot的"Starters",將會使用LogBack作為日志工具。其擁有適當的回退路由,以確保Java Util Logging、Log4J2和Commons Logging的依賴庫可以正常工作。
注意:Java擁有許多的日志框架。如果上面的日志工具使你迷惑不堪,請不要擔心。一般情況下,并不需要你更改日志依賴,SpringBoot也會工作的很好。
26.1 日志格式
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)
26.2 控制臺輸出
采用默認的日志配置日志信息將會被輸出到控制臺。默認情況下ERROR、WARN和INFO級別的信息將會被記錄顯示。你也可以通過啟動應用時添加--debug標簽來開啟debug模式。
$ java -jar muapp.jar --debug
follow翻譯、 注意:你也可以在application.properties配置文件中添加debug=true來達到同樣的目的。
當使用debug模式時,核心記錄器(包括內嵌容器、Hibernate和SpringBoot)被配置用來輸出更多信息。debug模式下并不會配置你的應用來記錄DEBUG級別的所有信息。
或者,你也可以通過類似的兩種方法開啟trace模式,這種模式將會輸出核心記錄器的跟蹤日志。
26.2.1 著色輸出
如果你的終端支持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 HH:mm:ss.SSS}){yellow}
下面是SpringBoot支持的顏色或者樣式:
-
- blue
- cyan
- faint
- green
- magenta
- red
- yellow
26.3 文件輸出
默認情況下,SpringBoot只會將日志輸出到控制臺,而不會輸出到文件中。如果你想將日志不只輸出到控制臺,還是輸出到文件中,你需要在application.properties文件中進行logging.file或者logging.path屬性設置。
下表中顯示了logging.*屬性如何一起來使用:
logging.file | logging.path | Example | Description |
(none) | (none) | ? | 僅輸出到控制臺 |
指定文件 | (none) | my.log | 輸出到指定文件,名稱可以是準確的位置,也可以是相對于當前目錄的 |
(none) | 指定目錄 | /var/log? | 將spring.log輸出到指定目錄,名稱可以是準確的位置,也可以是相對于當前目錄的 |
表26.1 日志屬性
默認情況下,日志文件會記錄控制臺輸出、ERROR、WARN和INFO級別的日志信息,并且在達到10M的時候重新創建文件來記錄。
注意:SpringBoot的日志系統在應用程序生命周期的早期就完成初始化,因此通過@PropertiesSource注解加載的配置文件中的屬性將不會起到應有的作用(不生效)。
注意:日志的屬性與實際的日志基礎結構無關。因此,指定的配置內容(就像LogBack的logback.configurationFile屬性)并沒有被SpringBoot所管理。
26.4 日志級別
所有支持的日志系統都擁有在Spring Environment(環境就如SpringBoot中的application.properties)中使用logging.level.*=LEVEL的方式進行日志級別的配置,其中LEVEL可以是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF之一。根日志可以使用屬性logging.level.root進行配置,例如:(在application.properties中)
1 logging.level.root=WARN 2 logging.level.org.springframework.web=DEBUG 3 logging.level.org.hibernate=ERROR
注意:默認情況下,SpringBoot會重定義Thymeleaf模板INFO信息,以使其可被DEBUG級別的日志所記錄。這有助于減少標準日志輸出中的亂象。有關如何在你的配置中重定義請參照LevelRemappingAppender。
26.5 自定義日志配置
各類日志系統可被類路徑下的適當的庫所激活,然后被類根路徑下的或者Spring環境中的logging.config屬性所指定的路徑下的適合的配置文件所自定義。
你可以通過org.springframework.boot.logging.LoggingSystem系統屬性來強制SpringBoot使用某一指定的日志系統。其值為實現LoggingSystem的完全限定名。你也可以為其設置為none來似的日志功能完全失效。
注意:因為日志系統在ApplicationContext初始化之前就完成了初始化。所以無法通過@Configuration中的@PropertiesSources來控制日志系統。系統屬性和SpringBoot的基本配置文件效用完好。
基于你的日志系統,以下文件將會被加載:
Logging System | Customization(自定義) |
LogBack? | logback-spring.xml;ogback-spring.groovy;logback.xml;logback.groovy |
Log4j2? | log4j2-spring.xml;log4j2.xml |
JDK (Java Util Logging) | logging.properties |
注意:如果可能,我們建議您使用- spring變量來配置日志配置(例如logBack-spring.xml而不是logBack.xml)如果你使用的以往的配置路徑,Spring將不能完整的控制日志的初始化。
注意:Java Util日志中有一些已知的類加載問題,這些問題在從“可執行jar”中運行時引起問題。我們建議你盡可能避免使用它。
為了幫助定制,一些其他屬性從Spring環境轉移到系統屬性:
Spring Environment? | System Property | Comments(說明) |
logging.exception-conversion-word | LOG_EXCEPTION_CONVERSION_WORD? | 記錄異常時使用的轉換詞 |
logging.file | LOG_FILE? | 在默認的日志配置中使用 |
logging.path | LOG_PATH? | 在默認的日志配置中使用 |
logging.pattern.console | CONSOLE_LOG_PATTERN? | 用于控制臺日志輸出的日志格式(僅支持默認的LogBack配置) |
logging.pattern.file | FILE_LOG_PATTERN? | 用于文件輸出日志的日志格式(僅支持默認的額LogBack配置) |
logging.pattern.level | LOG_LEVEL_PATTERN? | 用于渲染日志級別的樣式(默認為%5p)(僅支持默認的額LogBack配置) |
PID? | PID? | 當前進程ID(在可能的情況下發現并沒有定義為系統環境變量) |
所有支持的日志系統都可以在解析其配置文件時查閱系統屬性。例如spring-boot.jar中的默認配置。
如果你想在一個日志屬性中使用占位符,你需要使用SpringBoot的語法,而不是底層框架的語法。另外如果你在使用LogBack,你需要使用:來分隔一個屬性和其默認值,而不是:-。
通過覆蓋LOG_LEVEL_PATTERN屬性(或者LogBack中的logging.pattern.level屬性),你可以在日志行中添加MDC(Mapped Diagnostic Context映射調試上下文:是 log4j 和 logback 提供的一種方便在多線程條件下記錄日志的功能)和ad-hoc(點對點)內容。例如:如果你使用logging.pattern.level=user:%X{user} %5p配置,則默認的日志輸出格式將會包含一個名為user的MDC條目(當然需要存在才能顯示)例如:
2015-09-30 12:30:04.031 user:juergen INFO 22174 --- [ nio-8080-exec-0] demo.Controller Handling authenticated request
26.6 LogBack擴展
SpringBoot為LogBack提供了許多擴展屬性用于高級配置。你可以在你的logback-spring.xml配置文件中使用這些屬性。
注意:由于logback.xml文件加載的過于早(早于SpringBoot應用的啟動),所以你不能在其中使用這些擴展屬性,你需要使用logBack-spring.xml文件或者logging.config屬性。
注意:這些擴展屬性無法與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]
26.6.1 定制化的配置
<springProfile>標簽可用于在Spring配置文件中依據條件執行或者排除執行某些配置,其可用于<congfiguration>元素內的任何位置。使用name屬性來指定那個配置切面可被執行。多個Profile可以使用以逗號分割的方式來指定。
1 <springProfile name="staging"> 2 <!-- configuration to be enabled when the "staging" profile is active --> 3 </springProfile> 4 5 <springProfile name="dev, staging"> 6 <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> 7 </springProfile> 8 9 <springProfile name="!production"> 10 <!-- configuration to be enabled when the "production" profile is not active --> 11 </springProfile>
26.6.2 環境屬性
<springProperty>標簽可以允許你從Spring環境中提取屬性來用于LogBack。這在你從application.properties中獲取關于LogBack配置的屬性的值時很有效。這個標簽和LogBack的<properties>標簽類似的方式工作,并不是直接制定一個值,而是指定屬性的來源(source屬性)。你可以使用scope屬性來保存屬性,否則只會把存在本地。如果你想要指定一個可靠的值,以防其未被配置,你可以使用defaultValue屬性來指定一個默認值。
1 <springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/> 2 <appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender"> 3 <remoteHost>${fluentHost}</remoteHost> 4 ... 5 </appender>
注意:source屬性的值必須采用串的形式(例如:my.property.name)。然而可以使用輕松的規則將屬性添加到環境中。