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是不好用的. 这是官方文档的 ...
随机推荐
- (十六)VMware Harbor 复制镜像
Step 1: 点击复制镜像后 Step 2: 填写复制镜像信息 Step 3:在sx628下,会多出一个镜像
- zipfile tarfile模块
zipfile --- 使用ZIP存档 这个模块提供了创建.读取.写入.添加及列出 ZIP 文件的工具 # 创建一个ZipFile对象, 可使用上下文管理 with class zipfile.Zip ...
- 【MRR】转-MySQL 的 MRR 优化
MRR,全称「Multi-Range Read Optimization」. 简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能. 至于: 为什么要把随机读转化为顺序 ...
- 网站指纹识别工具Whatweb的使用
目录 whatweb 一些常见的Whatweb的扫描 常规扫描 批量扫描 详细回显扫描 扫描强度等级控制 快速本地扫描(扫描内网的主机) 将扫描结果导出至文件内 whatweb whatweb 是ka ...
- UVA11100旅行(大包装小包,问最少多少个包)
题意: 有n个包裹,每个包裹的大小都给出了,然后小的包裹可以装到大的包裹里,问最少装成多少个包裹,装成最小的包裹后还有一个限制就是让包裹数最多的那个包裹最少,就是说尽量都平均分,比如有6 ...
- C#-几个STL相关
C#结构体排序 1................................................. 声明 struct data { public string A; public ...
- 用最容易的方式学会单链表(Python实现)
单链表与数组 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列也会有如下缺点: 一个动态数组的长度可能超过实际存储数组元素所需 ...
- PHP + JQuery 实现多图上传并预览
简述 PHP + JQuery实现 前台:将图片进行base64编码,使用ajax实现上传 后台:将base64进行解码,存储至文件夹,将文件名称入库 效果图 功能实现 html <!DOCTY ...
- 【Redis】redis异步消息队列+Spring自定义注解+AOP方式实现系统日志持久化
说明: SSM项目中的每一个请求都需要进行日志记录操作.一般操作做的思路是:使用springAOP思想,对指定的方法进行拦截.拼装日志信息实体,然后持久化到数据库中.可是仔细想一下会发现:每次的客户端 ...
- java学习路线分析