perf4J с MDC - PullRequest
       29

perf4J с MDC

1 голос
/ 23 марта 2011

Кто-нибудь знает, имеет ли perf4J поддержку log4j MDC.Все мои операторы журнала добавляются со значениями MDC, однако операторы журнала perf4J не показывают значение MDC.

Пожалуйста, смотрите ниже, я ожидаю, что MDCMappedValue будет отображаться также в конце операторов журнала [TimingLogger].

18: 35: 48,038 ИНФОРМАЦИЯ [LoginAction] Вход пользователя kermit в приложение - MDCMappedValue 18: 35: 48,749 ИНФО [PostAuthenticationHandler] doPostAuthenticate () запущен - MDCMappedValue 18: 36: 03,653 ИНФО [PostAutheiledHandдля 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] -

1 Ответ

0 голосов
/ 26 марта 2012

Кажется, мой тест дает ожидаемые результаты. Обратите внимание, что я использую 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]
...