Spring Boot學習筆記—日誌

開發應用時,日誌框架的依賴是不可避免的。應用依賴的其餘框架中,可能又依賴了其餘不一樣的框架,例如你的應用使用的Logback,但Spring系列框架使用的Log4j,還有某某框架依賴的Commons Logging等等。還好有Self4j這個橋接「神器」,能夠完成不一樣日誌框架的整合,實現大一統的局面。html

上述的內容,開發應用時配置過日誌的人,確定不會陌生。筆者在開發Spring MVC項目時主要使用的Logback+Self4j。既然要使用Spring Boot,結合以往的工做經驗,天然須要瞭解其日誌配置。java

默認的日誌配置

Spring Boot內部日誌系統使用的是Commons Logging,但開放底層的日誌實現。默認爲會Java Util Logging, Log4J, Log4J2和Logback提供配置。每種狀況下都會預先配置使用控制檯輸出,也可使用可選的文件輸出。git

默認狀況下,若是你使用'Starter POMs',那麼就會使用Logback記錄日誌。爲了確保那些使用Java Util Logging,Commons Logging,Log4J或SLF4J的依賴庫可以正常工做,正確的Logback路由也被包含進來。也就說,如今你的項目日誌工做統一交由Logback來作,即便依賴庫使用了其餘的日誌,沒有關係,私下都會「轉交」Logback,按照Logback配置的輸出方式,統一記錄和輸出。spring

日誌輸出方式

Spring Boot應用默認只在控制檯輸出,默認ERROR,WARN和INFO級別的信息會被記錄。若是想在控制檯輸出DEBUG級別的日誌信息,可使用命令行「java -jar xxx.jar --debug」服務器

使用過日誌,咱們都知道日誌記錄是能夠指定格式的,包括日誌級別、時間、日誌名、線程ID等等。Spring Boot默認有一套本身的日誌格式以下所示,固然你也能夠經過自定義來覆蓋其默認格式。app

  1. 日期和時間 - 精確到毫秒, 且易於排序。
  2. 日誌級別 - ERROR, WARN, INFO, DEBUG 或 TRACE。
  3. Process ID。
  4. 一個用於區分實際日誌信息開頭的---分隔符。
  5. 線程名 - 包括在方括號中( 控制檯輸出可能會被截斷) 。
  6. 日誌名 - 一般是源class的類名( 縮寫) 。
  7. 日誌信息。

Spring的日誌不只僅侷限於控制檯,能夠輸出至日誌文件。只須要在classpath下的application.properties裏設置logging.file或logging.path屬性便可。框架

  • logging.file能夠明確指定日誌文件的名稱,建議使用絕對路徑。
  • logging.path則是指明瞭日誌文件的輸出目錄位置,默認文件名稱爲spring.log,仍是建議使用絕對路徑。

**ps:**之因此推薦絕對路徑,是由於筆者之前工做時使用的Logback配置文件中,日誌文件路徑使用的是相對路徑,可部署到Linux服務器時,並不是在預想的位置輸出,而是在三個位置都有日誌的存在,排查日誌時形成了很大的阻礙,後來改成絕對路徑修復了問題。spring-boot

Spring Boot的默認配置,日誌文件每達到10M就會被輪換(分割),和控制檯同樣,默認記錄ERROR, WARN和INFO級別的信息。spa

日誌級別控制

能夠在application.properties裏添加「logging.level.*=xxx」的方式,來修改Spring Boot日誌輸出的級別。.net

#控制root logger的日誌級別爲WARN以上
   logging.level.root=WARN
#控制org.springframework包下的日誌級別爲DEBUG以上
logging.level.org.springframework=DEBUG
#控制org.hibernate包下的日誌級別爲ERROR
logging.level.org.hibernate=ERROR

以前筆者在使用logback.xml時,其中的一段配置與上述配置是等效的。

<logger name="org.springframework" level="DEBUG" />
<logger name="org.hibernate" level="ERROR" />
<root level="WARN"></root>

能夠看到咱們既能夠配置默認的root日誌級別,也能夠細化控制某些類庫的日誌級別。

自定義日誌配置

自定義Spring Boot應用的日誌配置很簡單,默認只須要將日誌的標準配置文件放入classpath下便可。也能夠在application.properties文件中設置logging.config屬性來指定自定義配置文件。因爲筆者以前工做一直採用的是Logback,因此使用以前所用的logback.xml就能夠修改日誌級別控制、日誌輸出格式、日誌文件輸出等等。傳送門

並且在應用的平常維護中,將日誌文件按級別分開輸出更有利。而Spring Boot默認是將全部級別的日誌所有輸出在一個文件裏,筆者認爲不妥,因此筆者更傾向於自定義配置。筆者已在公開的示例代碼中添加了以前經常使用的logback配置文件,可供參考。傳送門

引用外部屬性

上面的描述中,不少處提到使用配置的屬性值來修改Spring Boot的日誌行爲。其實日誌的初始化要早於應用的ApplicationContext建立,那麼咱們自定義的屬性經過@PropertySources註解引入是不被感知的。此時只有系統屬性和Spring Boot特定的具有擴展性的特殊屬性文件(例如application.properties)才能被感知。應該是加載時機不一樣吧。

即便是自定義配置,Spring Boot也爲咱們提供了方便。經過將一些Spring Environment載入的配置屬性轉換到系統屬性中,咱們能夠在自定義的日誌配置文件裏引用這些屬性值。傳送門

logback擴展

看開發指南,Spring Boot推薦使用Logback日誌的擴展配置功能。只須要將logback.xml命名爲logback-spring.xml,就能夠享受其擴展功能。傳送門

主要提供了兩個功能擴展:

  1. 提供了對Spring Profile機制的支持。
  2. 提供了在配置文件裏引用Spring Environment中的屬性。
相關文章
相關標籤/搜索