可以使用2个ConsoleAppender配置log4j,每个都有不同的布局?

时间:2013-03-16 15:50:52

标签: log4j

我想要使用不同的布局定义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

然而,当我尝试使用这些appender时,我遇到了问题。我有第一个附加到root的appender然后尝试将第二个附加到某些祖先记录器:

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 appender 而不是 stdoutMDC appender。无论是否禁用可加性,我都试过了,但没有区别。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请试试这个。

它可能有助于你

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

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

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

log4j.rootLogger = DEBUG,consoleAppender