Logback動(dòng)態(tài)修改日志級(jí)別的方法
問題提出:
一般在生產(chǎn)環(huán)境上,日志的級(jí)別是INFO以上,但有時(shí)候程序出現(xiàn)問題(如SQL報(bào)錯(cuò)),少量日志不能盡快定位問題,這時(shí)候可以動(dòng)態(tài)修改日志級(jí)別到DEBUG,打印更多日志后可以快速定位到問題。
解決方法:
定義動(dòng)態(tài)修改日志級(jí)別的接口:這種方法的好處是不用修改配置文件,排錯(cuò)后再次調(diào)用接口把日志級(jí)別修改回去;壞處是需要在代碼中寫死指定哪些包要修改日志級(jí)別。示例代碼如下:
@RestController
public class LogController {
private static Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping(value = "logLevel/{logLevel}")
public String changeLogLevel(@PathVariable("logLevel") String logLevel) {
try {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.getLogger("org.mybatis").setLevel(Level.valueOf(logLevel));
loggerContext.getLogger("org.springframework").setLevel(Level.valueOf(logLevel));
} catch (Exception e) {
logger.error("動(dòng)態(tài)修改日志級(jí)別出錯(cuò)", e);
return "fail";
}
return "success";
}
}
修改logback.xml配置文件:在configuration根節(jié)點(diǎn)配置屬性scan和scanPeriod,scan為true時(shí),配置文件被修改會(huì)被重新加載,scanPeriod定義了掃描文件變化的周期,默認(rèn)6000毫秒,即一分鐘。這種做法的好處是不用自己寫修改日志級(jí)別的邏輯;壞處是要手動(dòng)更改配置文件,排錯(cuò)完成后需改回原來的配置。示例配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="6000">
<property name="LOG_HOME" value="/export/logs/cmdb/" />
<property name="APP_NAME" value="cmdb" />
<property name="LOG_FILE_EXPIRE_TIME" value="180" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | ${APP_NAME} - %p | %thread | %c | line:%L - %m%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}${APP_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>${LOG_FILE_EXPIRE_TIME}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | ${APP_NAME} - %p | %thread | %c | line:%L - %m%n</pattern>
</encoder>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Struts2學(xué)習(xí)教程之輸入校驗(yàn)示例詳解
這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之輸入校驗(yàn)的相關(guān)資料,文中通過示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用struts2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
Java創(chuàng)建型設(shè)計(jì)模式之單例模式
Java單例模式是一種設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)。可以使用多種方式實(shí)現(xiàn)單例模式,如餓漢式、懶漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類、枚舉等,每種方式都有其優(yōu)缺點(diǎn),需要根據(jù)具體情況選擇使用2023-05-05
Java實(shí)現(xiàn)文件分割和文件合并實(shí)例
本篇文章主要介紹了Java實(shí)現(xiàn)文件分割和文件合并實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

