歡迎光臨
每天分享高質量文章

一起來學 SpringBoot 2.x | 第三篇:SpringBoot 日誌配置

點選上方“芋道原始碼”,選擇“置頂公眾號”

技術文章第一時間送達!

原始碼精品專欄

 


摘要: 原創出處 http://blog.battcn.com/2018/04/23/springboot/v2-config-logs/ 「唐亞峰」歡迎轉載,保留摘要,謝謝!

  • 日誌格式

  • 日誌輸出

  • 顏色編碼

    • 編碼對照表

  • 檔案儲存

  • 自定義日誌配置

  • Logback擴充套件配置

    • springProfile

    • springProperty

  • 總結

  • 說點什麼


SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關註業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程

Spring Boot 內部採用的是 Commons Logging進行日誌記錄,但在底層為 Java Util Logging、Log4J2、Logback 等日誌框架提供了預設配置 。

Java 雖然有很多可用的日誌框架,但請不要擔心,一般來說,使用 SpringBoot 預設的 Logback 就可以了。

日誌格式

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: [/*]

輸出如下元素:

Logback 是沒有 FATAL級別的日誌,它將被對映到 ERROR

  • 時間日期:精確到毫秒,可以用於排序

  • 日誌級別:ERROR、WARN、INFO、DEBUG、TRACE

  • 行程ID

  • 分隔符:採用 --- 來標識日誌開始部分

  • 執行緒名:方括號括起來(可能會截斷控制檯輸出)

  • Logger名:通常使用原始碼的類名

  • 日誌內容:我們輸出的訊息

日誌輸出

SpringBoot 預設為我們輸出的日誌級別為 INFOWARNERROR,如需要輸出更多日誌的時候,可以透過以下方式開啟

  • 命令樣式配置: java -jar app.jar --debug=true , 這種命令會被 SpringBoot 解析,且優先順序最高

  • 資源檔案配置: application.properties 配置 debug=true 即可。該配置只對 嵌入式容器、Spring、Hibernate生效,我們自己的專案想要輸出 DEBUG 需要額外配置(配置規則:logging.level.=

日誌輸出級別配置

logging.level.root = WARN
logging.level.org.springframework.web = DEBUG
logging.level.org.hibernate = ERROR

#比如 mybatis sql日誌
logging.level.org.mybatis = INFO
logging.level.mapper所在的包 = DEBUG

日誌輸出格式配置

  • logging.pattern.console: 定義輸出到控制檯的格式(不支援JDK Logger)

  • logging.pattern.file: 定義輸出到檔案的格式(不支援JDK Logger)

顏色編碼

如果終端支援 ANSI,預設情況下會給日誌上個色,提高可讀性,可以在配置檔案中設定 spring.output.ansi.enabled 來改變預設值

  • ALWAYS: 啟用 ANSI 顏色的輸出。

  • DETECT: 嘗試檢測 ANSI 著色功能是否可用。

  • NEVER: 禁用 ANSI 顏色的輸出。

編碼對照表

Level Color
WARN Yellow
FATALERROR Red
INFODEBUGTRACE Green

如果想修改日誌預設色值,可以透過使用 %clr 關鍵字轉換。比如想使文字變為黃色 %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}。目前支援的顏色有(bluecyanfaintgreenmagentaredyellow

檔案儲存

預設情況下,SpringBoot 僅將日誌輸出到控制檯,不會寫入到日誌檔案中去。如果除了控制檯輸出之外還想寫日誌檔案,則需要在application.properties 設定logging.file 或 logging.path 屬性。

  • logging.file: 將日誌寫入到指定的 檔案 中,預設為相對路徑,可以設定成絕對路徑

  • logging.path: 將名為 spring.log 寫入到指定的 檔案夾 中,如(/var/log

日誌檔案在達到 10MB 時進行切割,產生一個新的日誌檔案(如:spring.1.log、spring.2.log),新的日誌依舊輸出到 spring.log 中去,預設情況下會記錄 ERRORWARNINFO 級別訊息。

  • logging.file.max-size: 限制日誌檔案大小

  • logging.file.max-history: 限制日誌保留天數

自定義日誌配置

由於日誌在 ApplicationContext 之前就初始化好了,所以 SpringBoot 為我們提供了 logging.config 屬性,方便我們配置自定義日誌檔案。預設情況它會根據日誌的依賴自動載入。

Logging System Customization
JDK (Java Util Logging) logging.properties
Log4j2ERROR log4j2-spring.xml 或 log4j2.xml
Logback logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy

Logback擴充套件配置

該擴充套件配置僅適用 logback-spring.xml 或者設定 logging.config 屬性的檔案,因為 logback.xml 載入過早,因此無法獲取 SpringBoot的一些擴充套件屬性

使用擴充套件屬性 springProfile 與 springProperty 讓你的 logback-spring.xml 配置顯得更有逼格,當別人還在苦苦掙扎弄logback-{profile}.xml的時候 你一個檔案就搞定了…

springProfile

 標簽使我們讓配置檔案更加靈活,它可以選擇性的包含或排除部分配置

<springProfile name="dev">
    
springProfile>



<springProfile name=“dev,test”>
    
springProfile>

<springProfile name=“!prod”>
    
springProfile>

案例


<springProfile name="dev">
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
    root>


springProfile>


<springProfile name=“test”>
    <root level=“INFO”>
        <appender-ref ref=“FILE”/>
        <appender-ref ref=“STDOUT”/>
    root>
springProfile>

springProperty

 標簽可以讓我們在 Logback 中使用 Spring Environment 中的屬性。如果想在logback-spring.xml中回讀 application.properties 配置的值時,這是一個非常好的解決方案


<springProperty scope="context" name="logName" source="spring.application.name" defaultValue="myapp.log"/>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/${logName}.logfile>


appender>

總結

更多細節請參考官方檔案:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration

目前很多大佬都寫過關於 SpringBoot 的教程了,如有雷同,請多多包涵,本教程基於最新的 spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一起介紹…

666. 彩蛋




如果你對 Dubbo 感興趣,歡迎加入我的知識星球一起交流。

知識星球

目前在知識星球(https://t.zsxq.com/2VbiaEu)更新瞭如下 Dubbo 原始碼解析如下:

01. 除錯環境搭建
02. 專案結構一覽
03. 配置 Configuration
04. 核心流程一覽

05. 拓展機制 SPI

06. 執行緒池

07. 服務暴露 Export

08. 服務取用 Refer

09. 註冊中心 Registry

10. 動態編譯 Compile

11. 動態代理 Proxy

12. 服務呼叫 Invoke

13. 呼叫特性 

14. 過濾器 Filter

15. NIO 伺服器

16. P2P 伺服器

17. HTTP 伺服器

18. 序列化 Serialization

19. 叢集容錯 Cluster

20. 優雅停機

21. 日誌適配

22. 狀態檢查

23. 監控中心 Monitor

24. 管理中心 Admin

25. 運維命令 QOS

26. 鏈路追蹤 Tracing


一共 60 篇++

贊(0)

分享創造快樂