解决springboot(2.x集成log4j2调试日志无法关闭的问题)

这篇文章主要介绍了解决springboot 2.x集成log4j2调试日志无法关闭的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

解决springboot,2.x集成log4j2调试日志无法关闭的问题,久久派带你了解更多相关信息。

springboot2.x集成log4j2时,始终无法关闭log4j2自身的日志输出

已经做了如下配置:

在log4j2.xml的配置文件中,配置configuration的status属性为OFF;

确认系统所有地方无配置log4j2.debug;

如上配置都无法解决问题,只能从源码着手一探究竟。

从log4j2-api包中,找到StatusLogger,其设置日志输出level的代码如下:

private StatusLogger(final String name,final MessageFactory messageFactory) {        super(name, messageFactory);        final String dateFormat = PROPS.getStringProperty(STATUS_DATE_FORMAT, Strings.EMPTY);        final boolean showDateTime = !Strings.isEmpty(dateFormat);        this.logger =new SimpleLogger(\"StatusLogger\", Level.ERROR,false,true, showDateTime,false,                dateFormat, messageFactory, PROPS, System.err);        this.listenersLevel = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();         // LOG4J2-1813 if system property \"log4j2.debug\" is defined, print all status logging        if (isDebugPropertyEnabled()) {            logger.setLevel(Level.TRACE);        }    }

从上述代码可以看出,level的级别默认是设置为error,仅当有设置log4j2.debug时,才会输出trace日志。

那log4j2.debug属性在哪设置的呢?带着这个问题,寻找到了SystemPropertiesPropertySource。这个类在装载属性到Environment前有做自定义处理:

private static final String PREFIX =\"log4j2.\"; @Overridepublic CharSequence getNormalForm(final Iterable<?extends CharSequence> tokens) {    return PREFIX + Util.joinAsCamelCase(tokens);}

如上述代码所示,该操作会解释所有系统属性,然后按解析后的token自行加上log4j2.的前缀。在这里导致了日志系统认为需要debug,进而输出trace日志的问题。

那系统属性上的debug哪来的呢?

首先,本地进程是以run模式启动的,环境变量也没有自行设置debug参数,为何会有jvm启动参数中会有 “-Ddebug” 的存在?

查看运行进程的Configurations配置如下所示:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

springboot有一个自定义配置,默认是勾上了enable debug output。把这个去掉,再次运行发现-Ddebug没有了,日志也正常了。

不过即便如此,log4j2是不是有点智障,这么拼接系统变量的搞法很容易混淆

springboot整合log4j2遇到的一个坑

项目中使用springboot,需要用log4j2做日志框架

问题

项目启动报错:Could not initialize Log4J2 logging from classpath:log4j2-dev.yml

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

是一个无法初始化Log4J2配置的问题,项目中采用的yml的配置文件。

前置操作

首先引入依赖:

    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-log4j2</artifactId>    </dependency>

去掉默认的logback配置:

    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>        <exclusions><!-- 去掉默认配置 -->            <exclusion>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-logging</artifactId>            </exclusion>        </exclusions>    </dependency>

添加配置文件:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

配置logging.config

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

以上是整合操作的必要配置,配置完成启动报错。

问题排查

根据异常信息描述,找到源码中初始化的代码:Log4J2LoggingSystem.loadConfiguration

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

继续跟进:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

发现是一个抽象方法,idea中使用ctrl+alt+B查找实现类:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

因为使用的是yml,所以实现类应该是YamlConfig这个,找到具体实现:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

通过debug发现isActive是false,所以返回null。在此类中找到isActive的含义:

解决springboot(2.x集成log4j2调试日志无法关闭的问题)

这是关键的逻辑,原来回去检查是否存在上面几个依赖的类,调试返现没有YAMLFactory这个类,可以看出这个类是jackson包中的,看来是少依赖了包。

解决

引入jackson-dataformat-yaml依赖:

    <dependency>        <groupId>com.fasterxml.jackson.dataformat</groupId>        <artifactId>jackson-dataformat-yaml</artifactId>    </dependency>

启动正常,问题解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/8185.html

(0)
上一篇 2021-07-29 20:48:25
下一篇 2021-07-29 20:48:30

相关推荐

  • 如何开好家长会(如何有效开展家长会培训心得)

    如何开好家长会(如何有效开展家长会培训心得)家长对新生的家长会还是很期待的。第一个家长会对班主任也很重要,因为这是你第一次正式在家长面前亮相,而家长对你是否认可很多时候来自于第一印象。要想开好第一个家长会,班主任首先要了解家长到学校来他想听

    2021-11-11
    4280
  • 网站如何制作(个人建站)

    如果说选择自己制作自己的网站的话,可以省去大量的设计费用,只要网站模板一套用,自己就能动手做一个网站。假如不清楚自建站是怎样进行的,那么,首先要了解自助建站的一些知识点。更多seo和网站建设的知识可以到我们的官网查看哦:www.yongsy

    2021-12-15
    1210
  • 诈骗款能追回来吗(诈骗金是否可以退回给受害者)

    法律问题分析:如果犯罪分子非法占有、处置被害人财产,致使被害人遭受到物质财产损失的,人民法院应当依法对犯罪分子所侵犯的财物予以追缴或者责令其退赔。如果经过追缴或退赔的方式,仍然不能弥补被害人的损失,被害人另行向人民法院的民事审判庭提起民事诉讼的,人民

    2022-01-10
    1940
  • 美文摘抄150字左右(摘抄优美句子150字左右)

    在茫茫人海之中,与你相遇,是缘份;与你相识,是情份。珍惜每份缘,珍惜每份情,人生时时都有福!光阴有限,时间太短,请珍惜每一寸光阴,不要虚度年华,不要消耗岁月,放下过去,把握未来,活在当下!每一天都是人生的最后一天,切不可得过

    2022-01-14
    2150
  • 拯救者R9000X(2021值得买吗?拯救者R9000X,2021值不值得买)

    ChinaJoy 2021已经在上海举行两天了,现场也是非常火爆,随着联想拯救者“新品日”的到来,联想也发布了拯救者R9000X轻薄电竞本,那么这款笔记本值不值得买呢,让我们一起来看看吧

    2021-08-02
    2380
  • 怎样判断菠萝蜜是否成熟(图解菠萝蜜辨别生熟技巧)

    摘要:一、看表皮:没有熟透的菠萝蜜带着微微的青色,里面果肉也不甜,口感不好。二、凭手感:拿回家的菠萝蜜一定不要第一时间打开,如果说表皮能够按下去,不扎手,微微软,说明菠萝蜜成熟了。三、闻气味:成熟后的菠萝蜜能够散发出浓郁香味。

    2023-04-21
    00

发表回复

登录后才能评论