logback日志級別設(shè)置無效問題及解決
背景
項目同事在定位定時任務(wù)沒執(zhí)行時發(fā)現(xiàn),定時任務(wù)中的日志沒有打印,改成WARN后能夠正常打印(代碼中l(wèi)og.info()改為log.warn())。
檢查logback.xml中發(fā)現(xiàn)對應(yīng)的日志級別為INFO級別,當(dāng)時不清楚還有哪里能夠配置日志級別,遂百度查閱資料。
原來配置文件中的logging.level.xx也能配置日志級別,且優(yōu)先級比logback.xml高。以下是源碼分析。
源碼分析
首先spring的配置項
都會在spring-configuration-metadata.json中進(jìn)行說明,因此在IDE中搜索該關(guān)鍵字,查看配置項的說明。

{
"name": "logging.level",
"type": "java.util.Map<java.lang.String,java.lang.String>",
"description": "Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.",
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener"
}
從內(nèi)容中可以看到
該配置項由org.springframework.boot.context.logging.LoggingApplicationListener處理。
protected void setLogLevels(LoggingSystem system, ConfigurableEnvironment environment) {
BiConsumer<String, LogLevel> customizer = getLogLevelConfigurer(system);
Binder binder = Binder.get(environment);
# 從配置中獲取日志級別的配置項
Map<String, LogLevel> levels = binder.bind(LOGGING_LEVEL, STRING_LOGLEVEL_MAP).orElseGet(Collections::emptyMap);
levels.forEach((name, level) -> configureLogLevel(name, level, customizer));
}
private void configureLogLevel(String name, LogLevel level, BiConsumer<String, LogLevel> configurer) {
if (this.loggerGroups != null) {
LoggerGroup group = this.loggerGroups.get(name);
if (group != null && group.hasMembers()) {
group.configureLogLevel(level, configurer);
return;
}
}
# 代碼會走到這里
configurer.accept(name, level);
}
配置logging.level.org=ERROR調(diào)試代碼如下
可以看到通過logfactory獲取logger后
使用logging.level配置項重新覆蓋了其日志級別,所以配置項中的日志級別高于logback.xml中的日志級別。



總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springcloud gateway網(wǎng)關(guān)服務(wù)啟動報錯的解決
這篇文章主要介紹了springcloud gateway網(wǎng)關(guān)服務(wù)啟動報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java數(shù)據(jù)結(jié)構(gòu)之快速冪的實現(xiàn)
快速冪是用來解決求冪運(yùn)算的高效方式。本文將詳細(xì)為大家介紹如何利用Java實現(xiàn)快速冪,以及利用快速冪求解冪運(yùn)算問題,需要的可以參考一下2022-03-03
Springboot基礎(chǔ)學(xué)習(xí)之初識SpringBoot
今天帶大家學(xué)習(xí)Springboot基礎(chǔ)知識,文中有非常詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05

