有時線上問題咱們用打日誌的方式來觀察錯誤或埋點參數,但因爲這些日誌若是都打出來會佔用大量存儲空間並且覆蓋了一些有效信息,因此線上級別通常設置INFO,調試級別用做特殊狀況下。此時若是線上想查看調試級別下的日誌,又不能更改日誌級別後從新發布該怎麼辦?web
Spring Boot提供了日誌級別動態配置功能,爲咱們的線上應用調試提供了很好的機制。在實際使用中須要結合Spring-Security提供的安全機制來保護Actuator 提供的各類系統級端點的安全訪問。spring
SpringBoot從版本 1.5.1 以後就提供了基於 spring-boot-starter-actuator 的端點 /loggers。經過該端點能夠實現查看系統的 package-path 的日誌級別,以及針對特定的 package-path 配置運行中的應用的日誌級別的功能。 安全
下面對動態調整日誌的級別進行設置。spring-boot
由於是基於 Web 的項目和利用 Actuator 提供的端點來進行配置,所以須要依賴:spa
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Actuator 提供的端點(Endpoints),默認是須要安全認證纔可以被訪問的。由於裏面涉及到一些敏感的信息。須要安全認證就須要配置 Spring-Security。爲了方便首先配置不須要安全權限的。.net
在配置中設置 management.security.enabled=false調試
咱們能夠發送GET 請求到 http://localhost:8080/loggers 來獲取支持的日誌等級,以及系統(ROOT)默認的日誌等和各個包路徑(com.xxx.commond等)對應的日誌級別。日誌
訪問會返回全部的類的日誌級別信息。code
經過 /loggers 端點提供的 POST 請求,修改包路徑com.xxx.commond的日誌級別爲DEBUG:blog
發送POST 請求到 http://localhost:8080/loggers/com.xxx.commond,其中請求 Body 的內容以下:
{
"configuredLevel": "DEBUG"
}
再用GET 訪問 http://localhost:8080/loggers/com.xxx.commond查看當前的日誌級別:
{
configuredLevel: "DEBUG",
effectiveLevel: "INFO"
}
經過 /loggers 配置的日誌級別在應用重啓時會恢復到系統的配置,若是想永久的配置日誌的級別仍是須要經過logging.level.package-path 來進行配置。
第二種方法就比較簡單了,若是你有Actuator做了服務端監控,則能夠直接訪問此監控服務,而後進入具體要調整日誌級別的服務進入Logging,直接進行點擊設置便可,很是方便,其實內部幫你作了跟上面同樣的請求。
這樣就能夠動態的設置調試程序了,而不用重啓服務,是否是很是方便。
部份內容引用參見:
https://blog.csdn.net/u014684364/article/details/81289696