1. 程式人生 > >Spring Boot 系列:日誌動態配置詳解

Spring Boot 系列:日誌動態配置詳解

>世界上最快的捷徑,就是腳踏實地,本文已收錄[架構技術專欄](http://www.jiagoujishu.com/)關注這個喜歡分享的地方。 開源專案: - 分散式監控(Gitee GVP最有價值開源專案 ):https://gitee.com/sanjiankethree/cubic - 攝像頭視訊流採集:https://gitee.com/sanjiankethree/cubic-video ## 一、簡介 Spring Boot 版本: 2.3.4.RELEASE 不知道大家有沒有過當線上出現問題的時候,需要某些DEBUG日誌,但奈何當前使用時INFO。 如果想啟用DEBUG就需要重新打包發版,但某些場景下重啟有可能問題就不會復現了,真是腦闊疼啊。 今天我們就來說下Spring Boot 下的日誌配置動態調整,讓你的日誌級別隨心而動。 #### Spring Boot的日誌 ![](https://imgkr2.cn-bj.ufileos.com/277c9024-b1dd-4039-ab29-b79a2fdd1040.jpg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=U67F86JUsNuQL4%252FZmEKXi7%252FRi6I%253D&Expires=1602927530) 在Spring Boot 內部使用的其實是Commons Logging, 而基於Spring Boot的配置載入機制為我們提供了Java Util Logging、Log4j2、Logback幾種日誌方式。 Logback是其預設的日誌框架,如果沒有特殊的必要真不建議更換了。(不要說效能了) #### 日誌格式 不要小瞧格式這種東西,在實際應用的時候是賊拉重要的一件事。 不知道大家的公司有沒有統一的日誌基礎元件,當然沒有也大概會有統一的日誌配置檔案吧。 想想如果你的日誌格式不統一的話,如果每個專案都有自己的風格的話,你叫你的運維小夥伴怎麼幫你切分日誌?幫你報警呢?那真是正則寫到死,完全靠愛發電了。(比如我們使用的Loghub 不統一要被運維打死的) 來看下我們的日誌格式配置,這裡只放PATTERN ``` -|%d{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%X{tid}|%thread|%logger{36}.%M:%L-%msg%n ``` 先解釋下各個位置: - `%d{yyyy-MM-dd HH:mm:ss.SSS} `:時間 - `%-5level` : 日誌級別 - `%X{tid} `: 我們自定義的分散式追蹤ID - `%thread `: 執行緒 - `%logger{36}.%M:%L` :class的全名(36代表最長字元).資訊 行號 - `%msg%n` : 輸出資訊 換行 **這裡不知道大家能否理解前面有一個 `-|`是為了什麼? 其實是為了在正則切分的時候方便區分換行的日誌,如異常堆疊的資訊。** #### 幾個知識點 再說幾個其他Spring Boot使用的小點,我們就來進入正題 - 在這裡Logback 沒有FATAL 級別,被歸到ERROR裡面了 - 可以在`application.properties `裡面配置 `debug=true`來開啟debug模式,你也可以配置`trace=true` 開啟 trace模式 - 可以再`application.properties`裡使用`loggin