logback日志级别设置无效问题及解决

 更新时间:2025年11月13日 09:05:57   作者:shuxiaohua  
文章总结:文章介绍了在Spring Boot项目中配置日志级别时,优先级问题,通过查阅资料发现,配置文件中的logging.level.xx也能配置日志级别,且优先级比logback.xml高,文章还提供了源码分析,说明了Spring Boot如何处理日志级别配置

背景

项目同事在定位定时任务没执行时发现,定时任务中的日志没有打印,改成WARN后能够正常打印(代码中log.info()改为log.warn())。

检查logback.xml中发现对应的日志级别为INFO级别,当时不清楚还有哪里能够配置日志级别,遂百度查阅资料。

原来配置文件中的logging.level.xx也能配置日志级别,且优先级比logback.xml高。以下是源码分析。

源码分析

首先spring的配置项

都会在spring-configuration-metadata.json中进行说明,因此在IDE中搜索该关键字,查看配置项的说明。

    {
      "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"
    }

从内容中可以看到

该配置项由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调试代码如下

可以看到通过logfactory获取logger后

使用logging.level配置项重新覆盖了其日志级别,所以配置项中的日志级别高于logback.xml中的日志级别。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java11新特性之HttpClient小试牛刀

    Java11新特性之HttpClient小试牛刀

    本文主要研究一下Java11的HttpClient的基本使用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java8中使用一行代码读取文件

    Java8中使用一行代码读取文件

    这篇文章主要介绍了Java8中使用一行代码读取文件,要注意,本文介绍的方法不适合读取很大的文件,因为可能存在内存空间不足的问题,需要的朋友可以参考下
    2015-03-03
  • springcloud gateway网关服务启动报错的解决

    springcloud gateway网关服务启动报错的解决

    这篇文章主要介绍了springcloud gateway网关服务启动报错的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java数据结构之快速幂的实现

    Java数据结构之快速幂的实现

    快速幂是用来解决求幂运算的高效方式。本文将详细为大家介绍如何利用Java实现快速幂,以及利用快速幂求解幂运算问题,需要的可以参考一下
    2022-03-03
  • java中全排列的生成算法汇总

    java中全排列的生成算法汇总

    本文给大家汇总介绍了常见的6种全排列的生成算法,包括字典序法、递增进位数制法、递减进位数制法、邻位交换法、递归类算法、元素增值法,有需要的小伙伴可以参考下
    2015-07-07
  • RocketMQ源码本地搭建调试方法

    RocketMQ源码本地搭建调试方法

    这篇文章主要介绍了RocketMQ源码本地搭建调试,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Java中static变量能继承吗

    Java中static变量能继承吗

    这篇文章主要介绍了Java中static变量能继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Java接口回调的本质详解

    Java接口回调的本质详解

    大家好,本篇文章主要讲的是Java接口回调的本质详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 应用市场中Java拦截器和切面的使用实例详解

    应用市场中Java拦截器和切面的使用实例详解

    这篇文章主要介绍了应用市场中Java拦截器和切面的使用实例详解,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Springboot基础学习之初识SpringBoot

    Springboot基础学习之初识SpringBoot

    今天带大家学习Springboot基础知识,文中有非常详细的图文解说及代码示例,对正在学习java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论