Spring Boot 學習筆記(5):日誌配置

官方文檔

Spring Boot使用Commons Logging進行全部內部日誌記錄,但保留底層日誌實現。爲Java Util Logging,Log4J2和 Logback提供了默認配置 。在不一樣狀況下,記錄器都預先配置爲使用控制檯輸出,而且還提供可選的文件輸出。java

默認狀況下,若是使用「Starters」,則使用Logback進行日誌記錄。還包括適當的Logback路由,以確保使用Java Util Logging,Commons Logging,Log4J或SLF4J的依賴庫都能正常工做。web

日誌格式

Spring Boot的默認日誌輸出相似於如下示例:spring

2014-03-05 105751.112 INFO 45469 --- [main] org.apache.catalina.core.StandardEngine:啓動Servlet引擎:Apache Tomcat / 7.0.52 
2014-03-05 105751.253 INFO 45469 --- [ost-startStop-1] oaccC [Tomcat]。[localhost]。[/]:初始化Spring embedded WebApplicationContext 
2014-03-05 105751.253 INFO 45469 --- [ost-startStop-1] osweb .context.ContextLoader:Root WebApplicationContext:初始化完成時間爲1358 ms 
2014-03-05 105751.698 INFO 45469 --- [ost-startStop-1] osbceServletRegistrationBean:映射servlet:'dispatcherServlet'到[/] 
2014-03 -05 105751.702 INFO 45469 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean:映射過濾器:'hiddenHttpMethodFilter'爲:[/ *]
複製代碼

Logback是沒有FATAL級別的日誌,它將被映射到ERROR數據庫

  • 時間日期:精確到毫秒,能夠用於排序
  • 日誌級別:ERROR、WARN、INFO、DEBUG、TRACE
  • 進程ID
  • 分隔符:採用 --- 來標識日誌開始部分
  • 線程名:方括號括起來(可能會截斷控制檯輸出)
  • Logger名:一般使用源代碼的類名
  • 日誌內容:咱們輸出的消息

控制檯輸出

日誌級別從低到高分爲:apache

TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
複製代碼

若是設置爲WARN ,則低於WARN的信息都不會輸出。後端

Spring Boot中默認配置ERRORWARNINFO級別的日誌輸出到控制檯。bash

您還能夠經過啓動您的應用程序 --debug 標誌來啓用「調試」模式(開發的時候推薦開啓),如下兩種方式皆可:app

在運行命令後加入--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>
複製代碼

後端一枚,默默搬磚擼代碼,若是以爲不錯歡迎關注個人公衆號

相關文章
相關標籤/搜索