1

有谁知道 perf4J 是否支持 log4j MDC。我所有的日志语句都附加了 MDC 值,但是 perf4J 日志语句不显示 MDC 值。

请参见下文,我希望 MDCMappedValue 也将显示在 [TimingLogger] 日志语句的末尾。

18:35:48,038 INFO [LoginAction] 将用户 kermit 登录到应用程序 - MDCMappedValue 18:35:48,749 INFO [PostAuthenticationHandler] doPostAuthenticate() 已启动 - MDCMappedValue 18:36:03,653 INFO [PostAuthenticationHandler] 为 kermit 加载配置文件 - MDCMappedValue 18:36 :08,224 INFO [TimingLogger] 开始[1300905347914] 时间[20310] 标签[HTTP.Success] 消息[/csa/login.seam] -
18:36:09,142 INFO [TimingLogger] 开始[1300905368240] 时间[902] 标签[HTTP .Success] 消息[/csa/home.seam] -

4

1 回答 1

0

我的测试似乎产生了预期的结果。请注意,我使用的是Log4JStopWatch,而不是LoggingStopWatch

package test;

import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.perf4j.StopWatch;
import org.perf4j.log4j.Log4JStopWatch;

public class Perf4jMdcTest {
    private Logger _ = Logger.getLogger(Perf4jMdcTest.class);

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Thread() {
                @Override
                public void run() {
                    MDC.put("id", getName());
                    Perf4jMdcTest perf4jMdcTest = new Perf4jMdcTest();
                    perf4jMdcTest.test1();
                    perf4jMdcTest.test2();
                    MDC.clear();
                }
            }.start();
        }
    }

    private void test1() {
        _.info("test1");
        StopWatch stopWatch = new Log4JStopWatch();
        stopWatch.start("a");
        try { Thread.sleep(300); } 
        catch (InterruptedException e) { }
        stopWatch.stop();
    }

    private void test2() {
        _.info("test2");
        StopWatch stopWatch = new Log4JStopWatch();
        stopWatch.start("b");
        try { Thread.sleep(600); } 
        catch (InterruptedException e) { }
        stopWatch.stop();

    }
}

我的 log4j.properties 如下:

log4j.rootLogger=debug, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] MDC:%X{id} - %m%n

输出是:

2012-03-26 20:37:43,049 [INFO ] MDC:Thread-1 - test1
2012-03-26 20:37:43,050 [INFO ] MDC:Thread-3 - test1
2012-03-26 20:37:43,049 [INFO ] MDC:Thread-2 - test1
2012-03-26 20:37:43,353 [INFO ] MDC:Thread-2 - start[1332787063053] time[300] tag[a]
2012-03-26 20:37:43,353 [INFO ] MDC:Thread-2 - test2
2012-03-26 20:37:43,353 [INFO ] MDC:Thread-1 - start[1332787063053] time[300] tag[a]
2012-03-26 20:37:43,354 [INFO ] MDC:Thread-1 - test2
2012-03-26 20:37:43,353 [INFO ] MDC:Thread-3 - start[1332787063053] time[300] tag[a]
2012-03-26 20:37:43,354 [INFO ] MDC:Thread-3 - test2
2012-03-26 20:37:43,955 [INFO ] MDC:Thread-2 - start[1332787063354] time[600] tag[b]
2012-03-26 20:37:43,955 [INFO ] MDC:Thread-1 - start[1332787063354] time[601] tag[b]
2012-03-26 20:37:43,955 [INFO ] MDC:Thread-3 - start[1332787063354] time[601] tag[b]
于 2012-03-26T18:43:19.343 回答