前言
接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。
流程
1. 判断用了什么配置文件
不知道是出于什么目的,项目中居然有log4j的properties和xml两个配置文件。
刚开始我都没有看到xml文件,一直在关注properties文件,发现也没啥问题。后来在Vm options添加了**-Dlog4j.debug**,在启动时打印log4j的信息中发现,log4j用的是xml文件。
2. additivity
其次就是<logger>的additivity属性。
<!-- 打印到控制台 -->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd HH:mm:ss,SSS} %-5p] [%t] %c{2} - %m%n" />
</layout>
</appender>
<!-- 打印到文件中 -->
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${logfileName}.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{MMdd HH:mm:ss SSS} %-5p] [%t] %c{3} - %m%n" />
</layout>
</appender>
<!-- logger -->
<logger name="com.test" additivity="false">
<level value="INFO" />
<appender-ref ref="fileAppender" />
</logger>
<!-- root -->
<root>
<priority value ="INFO"/>
<appender-ref ref="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 -->
<logger name="com.test" additivity="false">
<level value="INFO" />
<appender-ref ref="fileAppender" />
<appender-ref ref="myConsole" />
</logger>
95后小程序员,写的都是日常工作中的亲身实践,置身于初学者的角度从0写到1,详细且认真。文章会在公众号 [入门到放弃之路] 首发,期待你的关注。
原文地址:https://blog.csdn.net/CatchLight/article/details/129236667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_30326.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!