Springboot 動(dòng)態(tài)調(diào)整@Slf4j的log4j日志級(jí)別

在以前,使用顯示調(diào)用的日志記錄器,比如:

 Logger logger = Logger.getLogger(ChangeLogLevel.class);
 logger.setLevel(org.apache.log4j.Level.DEBUG);

這種方式是可以很方便的將日志的級(jí)別在運(yùn)行時(shí)進(jìn)行動(dòng)態(tài)調(diào)整,但在Springboot里,我們舍棄了這種很low的方式,采用了注解方式(@Slf4j)去創(chuàng)建日志記錄器,但Slf4j的Logger并沒(méi)有提供顯示修改Level的方法,所以需要我們自己去探索

slf4j是一個(gè)日志框架,在應(yīng)用初始化時(shí),它會(huì)綁定到具體的日志實(shí)現(xiàn)框架里,如Log4j、Logback或Log4j2等

我們系統(tǒng)使用的日志框架是 Log4j,因此基于Log4j實(shí)現(xiàn)日志級(jí)別的動(dòng)態(tài)調(diào)整

實(shí)現(xiàn)效果如下:

動(dòng)態(tài)調(diào)整日志級(jí)別示例

核心代碼只有一段邏輯,通過(guò) LoggerContext 的靜態(tài)方法獲取到一個(gè) LoggerContext,在通過(guò)記錄器上下文獲取到記錄器對(duì)象,對(duì)記錄器的日志級(jí)別進(jìn)行設(shè)置

    public static void main(String[] args) {

        String wantLevel = "DEBUG";
        log.error("error");
        log.warn("warn");
        log.info("info");
        log.debug("debug non display");

        System.out.println("log>" + log);
        System.out.println(log.isDebugEnabled());

        LoggerContext logContext = LoggerContext.getContext(false);
        logContext.getLogger(ChangeLogLevel.class.getName()).setLevel(Level.getLevel(wantLevel));

        System.out.println(log.isDebugEnabled());
        log.debug("debug will display");
        System.out.println("log>" + log);
 
    }

演示的只是一個(gè)main方法,能快速說(shuō)明問(wèn)題,可以將該邏輯放到 Controller 中,通過(guò)http等方法進(jìn)行調(diào)用設(shè)置

    /**
     * @param className 類名,需全路徑
     * @param wantLevel 等級(jí)  DEBUG/INFO/...
     */
    @GetMapping("/change/{className}/{wantLevel}")
    public String getSiteScoreInfo(@PathVariable String className, @PathVariable String wantLevel) {
        LoggerContext logContext = LoggerContext.getContext(false);
        logContext.getLogger(className).setLevel(Level.getLevel(wantLevel));

        return className + " change " + wantLevel ;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容