log4j的logger继承性

最近在做项目的时候,需要给多个包定义不同的log策略,比如在包com.test.a下的log记录到文件file1.log中,包com.test.b下的log记录到文件file2.log中,其他的log记录到file0.log中。最初是如下定义的:

log4j.rootLogger=error, stdout, file0

appender 1:stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] - %m%n

appender 2:file 0

log4j.appender.file0=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file0.layout=org.apache.log4j.PatternLayout
log4j.appender.file0.DatePattern=’.’yyyy-MM-dd
log4j.appender.file0.file=D:/log/file0.log
log4j.appender.file0.layout.ConversionPattern=%d %5p [%t] - %m%n

appender 3:file2

log4j.appender.file1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file1.layout=org.apache.log4j.PatternLayout
log4j.appender.file1.DatePattern=’.’yyyy-MM-dd
log4j.appender.file1.file=D:/log/file1.log
log4j.appender.file1.layout.ConversionPattern=%d %5p [%t] - %m%n

appender 4:file3

log4j.appender.file2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d %5p [%t] - %m%n
log4j.appender.file2.file=D:/log/file2.log
log4j.appender.file2.layout.ConversionPattern=%d %5p [%t] - %m%n

log4j.logger.com.test.a=info, stdout, file1

log4j.logger.com.test.b=info, stdout, file2

这样定义之后会发现file1.log,file2.log可以正常记录日志,但是在file0.log中也记录了file1.log,file2.log中的日志。就是说记录重复了。

以上问题的关键是log4j的logger是继承性的,子logger会叠加式地继承父logger的所有appender。

比如:
log4j.logger.com.test = info, stdout
log4j.logger.com.test.a = info, stdout
结果会导致test.a下的所有日志会在stdout输出两次。

解决方案有以下两种:
1.不定义全局log4j.rootLogger,给不同包的logger指定不同的appender。
2.给子logger定义additive属性的标识,默认是true,是继承父logger的。只要定义成为false就可以了。
比如上面的问题只要按照以下定义就可以了:
log4j.logger.com.test.a=info, stdout, file1
log4j.additivity.com.test.a=false
log4j.logger.com.test.b=info, stdout, file2
log4j.additivity.com.test.b=false

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值