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 日志等级设置无效,原因竟然是因为这个?!的更多相关文章

  1. Scrapy框架之日志等级

    一.日志等级 CRITICAL:严重错误 ERROR:一般错误 WARNING:警告 INFO: 一般信息 DEBUG:调试信息 [注意:默认的日志等级是DEBUG] 二.日志等级设置 修改setti ...

  2. CEF之CefSettings设置日志等级

    CefSettings结构体允许定义全局的CEF配置,经常用到的配置项如下: single_process 设置为true时,Browser和Renderer使用一个进程.此项也可以通过命令行参数“s ...

  3. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  4. SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面

    前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...

  5. 11-scrapy(递归解析,post请求,日志等级,请求传参)

    一.递归解析: 需求:将投诉_阳光热线问政平台中的投诉标题和状态网友以及时间爬取下来永久储存在数据库中 url:http://wz.sun0769.com/index.php/question/que ...

  6. logback日志无法按日期分割的问题

    发现在线上的时候,日志无法按日期分割的问题,所有日志都在第一天部署的那个日期的文件里面. 背景是Springboot + logback 原因是: 之前是: 用timeBaseRollingPolic ...

  7. logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  8. div宽度设置无效问题解决

    问题描述: 要设置两个div在同一行显示,都加入了display:inline样式,但是其中一个div的宽度设置无效,在浏览器显示它的宽度始终是1003px. 解决办法: 方法1/给div加入样式:f ...

  9. mybatis用logback日志不显示sql的解决办法

    mybatis用logback日志不显示sql的解决方法 1.mybatis-config.xml的设定 关于logimpl的设定值还不支持logback,如果用SLF4J是不好用的. 这是官方文档的 ...

随机推荐

  1. day9.函数2

    一.函数对象 函数是第一类对象,第一等公民,函数对象即函数可以被当作变量去用. 具体分为四个方面: 1.可以被赋值 def func(): print('from func') f = func pr ...

  2. Digit Counting UVA - 1225

    ​ Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequ ...

  3. 翻译:《实用的Python编程》InstructorNotes

    实用的 Python 编程--讲师说明 作者:戴维·比兹利(David Beazley) 概述 对于如何使用我的课程"实用的 Python 编程"进行教学的问题,本文档提供一些通用 ...

  4. 963. Minimum Area Rectangle II

    Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from these ...

  5. 使用EasySYS搭建驱动开发基本框架

    提供EasySYS的下载地址:http://bbs.pediy.com/showthread.php?p=956643,看雪上有提供下载,自行百度. EasySYS你能够帮我们快速的搭建驱动的开发框架 ...

  6. DVWA之Reflected XSS(反射型XSS)

    目录 Low Medium High Impossible Low 源代码: <?php header ("X-XSS-Protection: 0"); // Is ther ...

  7. Python 爬虫 BeautifulSoup4 库的使用

    BeautifulSoup4库 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.lxml 只会局部遍历,而Be ...

  8. Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下

    2.2  IA-32处理器体系结构 如前所述,IA-32是指始于Intel386直到当前最新的奔腾4的系列的处理器(额...这本书是什么时候写的啊,表示现在应该是I7啊),在IA-32的发展过程中,I ...

  9. 【python】Leetcode每日一题-扰乱字符串

    [python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...

  10. 使用navicat连接阿里云上mysql

    使用宝塔面板安装mysql Linux基本内容,里面有涉及到安装Mysql 修改密码 而且也要在数据库的菜单中设置root密码 修改后密码后进行登录,就不会出现下面的报错了 [root@centos7 ...