【问题标题】:Possible to configure log4j with 2 ConsoleAppenders, each with differrent layout?可以用 2 个 ConsoleAppender 配置 log4j,每个都有不同的布局吗?
【发布时间】:2013-03-16 15:50:51
【问题描述】:

我希望有 2 个不同的 log4j ConsoleAppenders 定义了不同的布局。我尝试了以下方法:

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{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.stdoutMDC=org.apache.log4j.ConsoleAppender
log4j.appender.stdoutMDC.Target=System.out
log4j.appender.stdoutMDC.layout=org.apache.log4j.PatternLayout
log4j.appender.stdoutMDC.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L (hibernateLoadPlanWalkPath->%X{hibernateLoadPlanWalkPath}) - %m%n

但是,当我尝试使用这些附加程序时,我遇到了问题。我将第一个附加程序附加到根目录,然后尝试将第二个附加程序附加到某些祖先记录器:

log4j.rootLogger=info, stdout

log4g.logger.org.hibernate.loader.plan=trace, stdoutMDC
log4g.additivity.org.hibernate.loader.plan=false

log4g.logger.org.hibernate.persister.walking=trace, stdoutMDC
log4g.additivity.org.hibernate.persister.walking=false

我遇到的问题是,来自这两个祖先记录器的消息最终都进入了 stdout 附加程序而不是 stdoutMDC 附加程序。我尝试了禁用和不禁用可加性,但没有区别。

有什么想法吗?

【问题讨论】:

  • 大声笑,如果您使用正确的前缀会有所帮助。 'log4j.logger' 而不是 'log4g.logger' :)

标签: log4j


【解决方案1】:

请试试这个。

也许对你有帮助

注意:%X{userName} - 这是您从映射诊断上下文 (MDC) 获取数据的方式

注意 %X{userName} - 这是您从映射诊断上下文 (MDC) 获取数据的方式

log4j.appender.consoleAppender.layout.ConversionPattern = %-4r [%t] %5p %c %x - %m - %X{userName}%n

log4j.rootLogger = 调试,consoleAppender

【讨论】:

  • 这根本不是我要问的。 MDC 值仅与一组特定的日志记录类别相关。事实上,如果我将完全相同的模式布局移动到附加到根目录的附加程序中,它就可以正常工作。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2013-06-25
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多