Spring Boot 系列:日誌動態配置詳解
阿新 • • 發佈:2020-10-16
>世界上最快的捷徑,就是腳踏實地,本文已收錄[架構技術專欄](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