log4j线上不打印日志

问题描述

使用log4j的项目(包名com.abc)在服务器上未打印日志,本地控制台打印正常,文件中未输出。

日志文件能够正常生成,并且也有日志打印,但是业务日志没有打印。

只打印了com.xxx包下的日志。

问题分析

出现日志无法打印的问题大概率就在logback.xml的配置上,具体logback的配置参数的具体解释网上有很多,具体可以看一下
https://juejin.cn/post/7200549600590282789

在logback.xml中可以发现一个配置项:

1
2
3
4
5
6
7
    <!-- 本地测试时,可以修改level 以便打印debug日志 -->
    <!--定义com.xxx包下的类日志向哪个appender写入日志-->
    <logger name="com.xxx" level="info" additivity="false">
        <appender-ref ref="FILE-debug" />
        <appender-ref ref="FILE-error" />
        <appender-ref ref="STDOUT" />
    </logger>

logger标签可以指定特定包的输出,additivity字段含义如下

如果logger里面配置了additivity=“false”,就会覆盖root的,只打印一遍;但是additivity=“true”,就会向上层再次传递,不会覆盖,而是打印两遍!

通过查看logback.xml文件我们可以发现,整个文件中只使用了一个logger打印com.xxx包下的日志,而我们的项目的package为com.abc。

问题解决

至此问题已经排查完毕,那问题的解决也很简单,新增加一个com.abc的logger即可

1
2
3
4
5
6
7
    <!-- 本地测试时,可以修改level 以便打印debug日志 -->
    <!--定义com.xxx 包下的类日志向哪个appender写入日志-->
    <logger name="com.abc" level="info" additivity="false">
        <appender-ref ref="FILE-debug" />
        <appender-ref ref="FILE-error" />
        <appender-ref ref="STDOUT" />
    </logger>