Logback動(dòng)態(tài)修改日志級(jí)別的方法
問(wèn)題提出:
一般在生產(chǎn)環(huán)境上,日志的級(jí)別是INFO以上,但有時(shí)候程序出現(xiàn)問(wèn)題(如SQL報(bào)錯(cuò)),少量日志不能盡快定位問(wèn)題,這時(shí)候可以動(dòng)態(tài)修改日志級(jí)別到DEBUG,打印更多日志后可以快速定位到問(wèn)題。
解決方法:
定義動(dòng)態(tài)修改日志級(jí)別的接口:這種方法的好處是不用修改配置文件,排錯(cuò)后再次調(diào)用接口把日志級(jí)別修改回去;壞處是需要在代碼中寫(xiě)死指定哪些包要修改日志級(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毫秒,即一分鐘。這種做法的好處是不用自己寫(xiě)修改日志級(jí)別的邏輯;壞處是要手動(dòng)更改配置文件,排錯(cuò)完成后需改回原來(lái)的配置。示例配置如下:
<?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)資料,文中通過(guò)示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用struts2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05Java創(chuàng)建型設(shè)計(jì)模式之單例模式
Java單例模式是一種設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)??梢允褂枚喾N方式實(shí)現(xiàn)單例模式,如餓漢式、懶漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類、枚舉等,每種方式都有其優(yōu)缺點(diǎn),需要根據(jù)具體情況選擇使用2023-05-05Java實(shí)現(xiàn)文件分割和文件合并實(shí)例
本篇文章主要介紹了Java實(shí)現(xiàn)文件分割和文件合并實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08IDEA安裝Activiti插件并解決亂碼問(wèn)題(推薦)
這篇文章主要介紹了IDEA安裝Activiti插件并解決亂碼問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06