LogBack 日志等级设置无效,原因竟然是因为这个?!
Hello,大家好,我是楼下小黑哥~
最近被公司派去北京出差,本以为是个轻松的差事,北京一周游~
但是没想到第一天就是九点半下班, 大意了~

好了,回到正题,今天来讲下最近调试项目的时候发现的一个 Logback 日志级别设置不生效的问题。
问题背景
事情是这样的,我们的项目是一个 SpringBoot 的工程的,其中日志框架使用的是 LogBack,配置文件如下所示:
<configuration scan="true" scanPeriod=" 5 seconds" debug="true">
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="DEBUG"/>
<root level="debug">
<appender-ref ref="stdout"/>
</root>
</configuration>
为了方便查看项目执行的 SQL,这里我把日志的级别调整成 DEBUG。
运行的项目,执行结果比较令人惊讶,日志仅仅输出了 INFO 日志,并没有输出 DEBUG 日志。
刚开始还以为 Logback 配置文件写的有问题,才导致这个问题。网上找了几个例子,对比了一下,这类的配置文件并没有什么问题。
于是进行一系列深度排查(令人头秃),最终终于找到了问题的原因。
问题原因
由于 Logback 的配置 debug=true,项目启动的时候,将会打印出 Logback 内部日志信息,日志如下:

从这个日志可以看到,Logback Root 已经设置为 DEBUG。
那为什么项目启动之后,DEBUG 就失效了?
不要急,接着往下看。
当 Spring 容器启动之后,Spring 内部将会发出一些列的 ApplicationEvent,然后这些将会被各类已经注册的 ApplicationListener监听。
由于这个项目是一个 SpringBoot 的工程,里面有一个 LoggingApplicationListener将会监听 ApplicationEnvironmentPreparedEvent,代码如下:

这里面的逻辑比较简单,获取系统配置的日志级别,levels 值如下:

可以看到这里 root 对应的值为 info,这里将会继续调用 Logback 的的方法设置日志级别,日志输出如下:

上面这些日志级别配置来自其实来自 SpringBoot 的配置文件 application.properties

总结
最后,总结一下,SpringBoot 项目,如果使用单独的 LogBack 配置文件,SpringBoot 的配置文件 application.properties 配置的 logging.level.root 将会覆盖的 Logback 配置文件中的 root 的配置:
<root level="debug">
<appender-ref ref="stdout"/>
</root>
问题看起来是那么简单,排查的过程真的是令人头秃。

LogBack 日志等级设置无效,原因竟然是因为这个?!的更多相关文章
- Scrapy框架之日志等级
一.日志等级 CRITICAL:严重错误 ERROR:一般错误 WARNING:警告 INFO: 一般信息 DEBUG:调试信息 [注意:默认的日志等级是DEBUG] 二.日志等级设置 修改setti ...
- CEF之CefSettings设置日志等级
CefSettings结构体允许定义全局的CEF配置,经常用到的配置项如下: single_process 设置为true时,Browser和Renderer使用一个进程.此项也可以通过命令行参数“s ...
- scrapy框架post请求发送,五大核心组件,日志等级,请求传参
一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
- 11-scrapy(递归解析,post请求,日志等级,请求传参)
一.递归解析: 需求:将投诉_阳光热线问政平台中的投诉标题和状态网友以及时间爬取下来永久储存在数据库中 url:http://wz.sun0769.com/index.php/question/que ...
- logback日志无法按日期分割的问题
发现在线上的时候,日志无法按日期分割的问题,所有日志都在第一天部署的那个日期的文件里面. 背景是Springboot + logback 原因是: 之前是: 用timeBaseRollingPolic ...
- logback日志写入数据库(mysql)配置
如题 建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1 logback 配置文件(如下) <?xml version="1.0" encoding ...
- div宽度设置无效问题解决
问题描述: 要设置两个div在同一行显示,都加入了display:inline样式,但是其中一个div的宽度设置无效,在浏览器显示它的宽度始终是1003px. 解决办法: 方法1/给div加入样式:f ...
- mybatis用logback日志不显示sql的解决办法
mybatis用logback日志不显示sql的解决方法 1.mybatis-config.xml的设定 关于logimpl的设定值还不支持logback,如果用SLF4J是不好用的. 这是官方文档的 ...
随机推荐
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之本地仓库-06 欢迎加QQ群:1026880196 进行讨论 1. 安装docker registry ...
- SpringBoot-如何设计优秀的后端接口?
1 概述 本篇文章以Spring Boot为基础,从以下三个方向讲述了如何设计一个优秀的后端接口体系: 参数校验:涉及Hibernate Validator的各种注解,快速失败模式,分组,组序列以及自 ...
- ISODateTimeFormat 转换2019-08-15T00:36:49.366456463Z 日期格式
import java.text.*; import java.text.SimpleDateFormat; import java.util.*; import org.joda.time.Date ...
- Typora 修改代码块高亮样式
目录 方法一:下载自己喜欢的样式 方法二:获取Typora自制主题 方法三:自己撰写css样式文件 方法一:下载自己喜欢的样式 Typora的代码块语法高亮使用的是CodeMirror实现的,所以需要 ...
- ListBox控件简单的数据绑定
<ListBox Margin="17,8,15,26" Name="ListBoxName" ItemsSource="{Binding Ta ...
- Wordpress学习链接整理
Wordpress学习链接整理 获取和使用 WordPress 中的全局变量 wordpress模板加载顺序汇总 WordPress载入页面时的模板加载机制(图) WordPress 条件判断标签及用 ...
- 【ElasticSearch】shards,replica,index之间的关系
1.index 包含多个shard ,在创建index的时候可以自定义shards和replica的数量 例如: 新增一个index,手动指定shard和replica的数量 PUT demo_ind ...
- hdu1305 字典树水题
题意: 给你一些字符串,然后问你他们中有没有一个串是另一个串的前缀. 思路: 字典树水题,(这种水题如果数据不大(这个题目不知道大不大,题目没说估计不大),hash下也行,把每个 ...
- xposed学习四:总结
xposed的学习要告一段落,接下来去学习android apk和so加固,这里我们回顾下xposed吧. xposed是个hook框架,它是基于dalvik(确切来说是目前的版本,作者说ART也快出 ...
- Docker安装ElasticSearch和Kibana
创建容器elasticsearch docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type= ...