spring boot線上日志級(jí)別動(dòng)態(tài)調(diào)整的配置步驟

前言
日志模塊是每個(gè)項(xiàng)目中必須的,用來(lái)記錄程序運(yùn)行中的相關(guān)信息。一般在開(kāi)發(fā)環(huán)境下使用DEBUG級(jí)別的日志輸出,為了方便查看問(wèn)題,而在線上一般都使用INFO級(jí)別的日志,主要記錄業(yè)務(wù)操作的日志。那么問(wèn)題來(lái)了,當(dāng)線上環(huán)境出現(xiàn)問(wèn)題希望輸出DEBUG日志信息輔助排查的時(shí)候怎么辦呢?修改配置文件,重新打包然后上傳重啟線上環(huán)境,之前確實(shí)是這么做的。下面會(huì)介紹使用動(dòng)態(tài)調(diào)整線上日志級(jí)別來(lái)解決這個(gè)問(wèn)題。
正文
spring boot版本:1.5.7
實(shí)現(xiàn)起來(lái)超級(jí)簡(jiǎn)單,使用spring boot自帶的LoggingSystem的api來(lái)動(dòng)態(tài)設(shè)置日志級(jí)別,當(dāng)然的項(xiàng)目需要提供動(dòng)態(tài)調(diào)整的接口,來(lái)達(dá)動(dòng)態(tài)調(diào)整的目的。不過(guò)博主項(xiàng)目使用了Apollo配置中心,利用其配置動(dòng)態(tài)生效的特性,soso就搞定了,代碼如下
@Service
public class DynamicLoggersConfig{
Logger logger= LoggerFactory.getLogger(getClass());
@ApolloConfig
private Config config;
private final static String LoggerTag="logging.level.";
private final LoggingSystem loggingSystem;
public DynamicLoggersConfig(LoggingSystem loggingSystem) {
Assert.notNull(loggingSystem, "LoggingSystem must not be null");
this.loggingSystem = loggingSystem;
}
@ApolloConfigChangeListener
private void configChangeListter(ConfigChangeEvent changeEvent){
SetkeyNames=config.getPropertyNames();
for (String key:keyNames){
if (StringUtils.containsIgnoreCase(key,LoggerTag)){
String strLevel=config.getProperty(key,"info");
LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(key.replace(LoggerTag,""),level);
logger.info("{}:{}",key,strLevel);
}
}
}
}配置
和在spring環(huán)境下正常配置日志級(jí)別一樣配置即可,如
logging.level.org.springframework = info logging.level.com.yudianbank.sales = debug logging.level.org.hibernate = info
如上代表spring體系工具開(kāi)啟INFO級(jí)別日志,業(yè)務(wù)系統(tǒng)開(kāi)啟DEBUG級(jí)別日志,hibernate開(kāi)啟INFO級(jí)別日志
文末結(jié)語(yǔ)
動(dòng)態(tài)日志輸出看似小功能,卻能解決非常大的問(wèn)題。各種環(huán)境bug排除都少不了看日志輸出。文件提到的Apollo是攜程開(kāi)源的配置中心項(xiàng)目,順道推廣下,感謝攜程開(kāi)源給了我們這么好的產(chǎn)品。項(xiàng)目地址如下
Apollo項(xiàng)目地址:https://github.com/ctripcorp/apollo
以上就是spring boot線上日志級(jí)別動(dòng)態(tài)調(diào)整的配置步驟的詳細(xì)內(nèi)容,更多關(guān)于spring boot線上日志級(jí)別動(dòng)態(tài)調(diào)整的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
如何解決IDEA使用Tomcat控制臺(tái)中文出現(xiàn)亂碼問(wèn)題
這篇文章主要介紹了如何解決IDEA使用Tomcat控制臺(tái)中文出現(xiàn)亂碼問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java TimeoutException:服務(wù)調(diào)用超時(shí)異常的正確解決方案
在現(xiàn)代軟件開(kāi)發(fā)中,服務(wù)間通信是構(gòu)建分布式系統(tǒng)的基礎(chǔ),然而,網(wǎng)絡(luò)延遲、服務(wù)負(fù)載、資源競(jìng)爭(zhēng)等因素都可能導(dǎo)致服務(wù)調(diào)用超時(shí),TimeoutException是Java中表示服務(wù)調(diào)用超時(shí)的常見(jiàn)異常之一,本文將探討TimeoutException的成因及解決方案,需要的朋友可以參考下2024-12-12
Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開(kāi)始學(xué)Spring Boot)
這篇文章主要介紹了Spring Boot集成Redis實(shí)現(xiàn)緩存機(jī)制(從零開(kāi)始學(xué)Spring Boot),需要的朋友可以參考下2017-04-04

