log4j appender和包

时间:2018-01-16 10:21:02

标签: logging log4j

我使用了2个appender:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.MapRDB=com.A.B.maprdblogger.Appender

stdout在控制台中写道。 MapRDB中的MapRDB。它是一个自定义的appender。

我的申请是在这个包裹上:com.A.B

对于我的日志,我需要:

  • 来自stdout中所有应用程序的错误
  • 从MapRDB中的com.A包中警告
  • 来自stdout中的com.A.B包的信息

所以我写道:

log4j.rootLogger=ERROR, stdout
log4j.logger.com.A=WARN, MapRDB
log4j.logger.com.A.B=INFO, stdout
log4j.additivity.com.A=false

使用此conf,我的控制台日志很好,但MapRDB中没有任何内容。

如果没有可加性false,我在MapRDB中有双重登录控制台和信息日志。我尝试了很多组合,但没有做任何我需要的事情......

我想我还没有理解如何使用log4j,任何机构都有解决方案吗?

1 个答案:

答案 0 :(得分:0)

解决方案:

# root logger option
log4j.rootLogger=WARN, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Log sent to MapRDB
log4j.appender.MapRDB=com.ingenico.datalake.maprdblogger.Appender
log4j.appender.MapRDB.Threshold=WARN
log4j.logger.com.ingenico=INFO
log4j.logger.com.ingenico.datalake=INFO, MapRDB

感谢这个答案:https://stackoverflow.com/a/23877814/8357778让我了解log4j的工作原理。我需要在良好的水平上定义MapRDB appender的阈值。它允许我将MapRDB设置为信息级别的追加器,但只是保持警告及以上。