Spring Boot動態修改logback框架日志級別


(1)原理

       日志框架中有一個工廠類:LoggerFactory,在這個類中可以獲取到當前日志的上下文對象LoggerContext,通過LoggerContext可以獲取到指定包的Logger ,通過Logger對象那就無所不能了。

(2)獲取當前日志等級

代碼:

@RequestMapping(value = "/getLoglevel")
 public Level getLoglevel( @RequestParam(value="package") String packageName) throws Exception {
        LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
        return loggerContext.getLogger(packageName).getLevel();
 }

  

這里先獲取到了LoggerContext,通過loggerContext,獲取到了指定包的Logger對象,通過logger對象中的getLevel()方法獲取到當前包的日志級別。

       訪問地址:http://localhost:8080/getLoglevel?package=com.kfit可以看到控制台輸出:

{"levelInt":20000,"levelStr":"INFO"}

(3)修改日志等級

       源碼如下:

   @RequestMapping(value = "/loglevel/{loglevel}")
    public String loglevel(@PathVariable("loglevel") String logLevel, @RequestParam(value="package") String packageName) throws Exception {
        //trace --> debug --> info --> warn --> error -->fatal
        LoggerContext loggerContext =(LoggerContext)LoggerFactory.getILoggerFactory();
        loggerContext.getLogger(packageName).setLevel(Level.valueOf(logLevel));
        return "ok";
   }

 這里獲取到LoggerContext之后,通過getLogger(packageName)獲取到logger對象,通過logger對象的setLevel()方法,修改當前包的日志級別。

(4)更優的方案

       這種方案是通過我們自己編碼的方法進行實現的,好消息是spring boot在1.5.+版本之后就實現了動態修改日志級別。具體可以看之前的文章《SpringBoot 動態修改日志級別》進行實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM