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

解决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 loggingif (isDebugPropertyEnabled()) {logger.setLevel(Level.TRACE);}}
从上述代码可以看出,level的级别默认是设置为error,仅当有设置log4j2.debug时,才会输出trace日志 。
那log4j2.debug属性在哪设置的呢?带着这个问题,寻找到了SystemPropertiesPropertySource 。这个类在装载属性到Environment前有做自定义处理:
【2.x集成log4j2调试日志无法关闭的问题 解决springboot】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配置如下所示:

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

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
2.x集成log4j2调试日志无法关闭的问题 解决springboot

文章插图
这是关键的逻辑,原来回去检查是否存在上面几个依赖的类,调试返现没有YAMLFactory这个类,可以看出这个类是jackson包中的,看来是少依赖了包 。
解决引入jackson-dataformat-yaml依赖:
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>
启动正常,问题解决 。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧 。