Spring Boot 1.5.x新特性:動態修改日誌級別

https://mp.weixin.qq.com/s/7lvoEQMhPX8jXe1A6Jcdggweb

前天Spring Boot 1.5終於迎來了第一個RELEASE版本:1.5.0,可是因爲一個編譯依賴問題在次日直接連擊到了1.5.1。該版本的發佈包含了超過320位貢獻者的奉獻、10000屢次的代碼提交。spring

每次Spring Boot版本更新所帶來的新特性都是咱們每一個用戶特別關注的。雖然其中很多特性可能對於大部分用戶來講還不必定適用,可是做爲基礎知識的儲備仍是有必定的必要性。對於1.5.x版本的新特性列表讀者能夠直接查看官方博文:《Spring Boot 1.5.1 released》來了解它們,本文不作這些概要性的介紹。在後續的一段時間內,本博客將會陸續介紹一些筆者關心且將會使用的關於Spring Boot 1.5.x中的一些新特性。安全

loggers端點

本文咱們就來看看Spring Boot 1.5.x中引入的一個新的控制端點:/loggers,該端點將爲咱們提供動態修改Spring Boot應用日誌級別的強大功能。該功能的使用很是簡單,它依然延續了Spring Boot自動化配置的實現,因此只須要在引入了spring-boot-starter-actuator依賴的條件下就會自動開啓該端點的功能(更多關於spring-boot-starter-actuator模塊的詳細介紹可見:《Spring Boot Actuator監控端點小結》一文)。微信

下面,咱們不妨經過一個實際示例來看看如何使用該功能:app

  • 構建一個基礎的Spring Boot應用。若是您對於如何構建還不熟悉,能夠參考《使用Intellij中的Spring Initializr來快速構建Spring Boot/Cloud工程》一文。ide

  • 在pom.xml引入以下依賴(若是使用Intellij中的Spring Initializr的話直接在提示框中選下web和actuator模塊便可)。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
    • 在應用主類中添加一個接口用來測試日誌級別的變化,好比下面的實現:
@RestController
@SpringBootApplication
public class DemoApplication {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String testLogLevel() {
        logger.debug("Logger Level :DEBUG");
        logger.info("Logger Level :INFO");
        logger.error("Logger Level :ERROR");
        return "";
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }  

}
    • 爲了後續的試驗順利,在application.properties中增長一個配置,來關閉安全認證校驗。
management.security.enabled=false

否則在訪問/loggers端點的時候,會報以下錯誤:spring-boot

{
  "timestamp": 1485873161065,
  "status": 401,
  "error": "Unauthorized",
  "message": "Full authentication is required to access this resource.",
  "path": "/loggers/com.didispace"
}

測試驗證

在完成了上面的構建以後,咱們啓動示例應用,並訪問/test端點,咱們能夠在控制檯中看到以下輸出:測試

2017-01-31 22:34:57.123  INFO 16372 --- [nio-8000-exec-1] ication$$EnhancerBySpringCGLIB$$d2a0b1e2 : Logger Level :INFO
2017-01-31 22:34:57.124 ERROR 16372 --- [nio-8000-exec-1] ication$$EnhancerBySpringCGLIB$$d2a0b1e2 : Logger Level :ERROR

因爲默認的日誌級別爲INFO,因此並無輸出DEBUG級別的內容。下面咱們能夠嘗試經過/logger端點來將日誌級別調整爲DEBUG,好比,發送POST請求到/loggers/com.didispace端點,其中請求體Body內容爲:ui

{
    "configuredLevel": "DEBUG"
}

從新訪問/test端點,咱們將在控制檯中看到以下輸出,在/test端點中定義的DEBUG日誌內容被打印了出來:this

2017-01-31 22:37:35.252 DEBUG 16372 --- [nio-8000-exec-5] ication$$EnhancerBySpringCGLIB$$d2a0b1e2 : Logger Level :DEBUG
2017-01-31 22:37:35.252  INFO 16372 --- [nio-8000-exec-5] ication$$EnhancerBySpringCGLIB$$d2a0b1e2 : Logger Level :INFO
2017-01-31 22:37:35.252 ERROR 16372 --- [nio-8000-exec-5] ication$$EnhancerBySpringCGLIB$$d2a0b1e2 : Logger Level :ERROR

能夠看到,到這裏爲止,咱們並無重啓過Spring Boot應用,而只是簡單的經過調用/loggers端點就能控制日誌級別的更新。除了POST請求以外,咱們也能夠經過GET請求來查看當前的日誌級別設置,好比:發送GET請求到/loggers/com.didispace端點,咱們將得到對於com.didispace包的日誌級別設置:

{
  "configuredLevel": "DEBUG",
  "effectiveLevel": "DEBUG"
}

咱們也能夠不限定條件,直接經過GET請求訪問/loggers來獲取全部的日誌級別設置,這裏就不列舉具體返回,讀者能夠自行嘗試。
版權聲明

本文采用 CC BY 3.0 CN協議 進行許可。 可自由轉載、引用,但需署名做者且註明文章出處。如轉載至微信公衆號,請在文末添加做者公衆號二維碼。
Spring Boot 1.5.x新特性:動態修改日誌級別

相關文章
相關標籤/搜索