0


log4j控制台不打印日志的故障解决方案

前言

接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。

在网上搜索了一圈,总结了一下个人解决这个问题的流程。

流程

1. 判断用了什么配置文件

不知道是出于什么目的,项目中居然有log4j的properties和xml两个配置文件。

刚开始我都没有看到xml文件,一直在关注properties文件,发现也没啥问题。后来在Vm options添加了**-Dlog4j.debug**,在启动时打印log4j的信息中发现,log4j用的是xml文件。

2. additivity

其次就是<logger>的additivity属性。

<!-- 打印到控制台 --><appendername="myConsole"class="org.apache.log4j.ConsoleAppender"><paramname="Target"value="System.out"/><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n"/></layout></appender><!-- 打印到文件中 --><appendername="fileAppender"class="org.apache.log4j.DailyRollingFileAppender"><paramname="File"value="${logfileName}.log"/><paramname="DatePattern"value="'.'yyyy-MM-dd'.log'"/><layoutclass="org.apache.log4j.PatternLayout"><paramname="ConversionPattern"value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n"/></layout></appender><!-- logger --><loggername="com.test"additivity="false"><levelvalue="INFO"/><appender-refref="fileAppender"/></logger><!-- root --><root><priorityvalue="INFO"/><appender-refref="myConsole"/></root>

在xml配置文件中,<appender>定义了日志以什么样的格式输出到控制台或者文件中。<logger>决定项目中的每个class绑定哪个appender。<root>是根logger,会绑定多个appender。

logger的additivity默认为true,表示此logger要打印的日志也要传给root一份,让root的appender进行打印。

3. 解决方案

方案一

修改additivity为true,或者直接去掉,因为默认值就是true

方案二

在com.test的logger里面将console的appender添加进去。

<!-- logger --><loggername="com.test"additivity="false"><levelvalue="INFO"/><appender-refref="fileAppender"/><appender-refref="myConsole"/></logger>

这样,就解决了在控制台不打印日志的问题了。


95后小程序员,写的都是日常工作中的亲身实践,置身于初学者的角度从0写到1,详细且认真。文章会在公众号 [入门到放弃之路] 首发,期待你的关注。

感谢每一次遇见

标签: log4j apache java

本文转载自: https://blog.csdn.net/CatchLight/article/details/129236667
版权归原作者 叫我阿柒啊 所有, 如有侵权,请联系我们删除。

“log4j控制台不打印日志的故障解决方案”的评论:

还没有评论