2012-03-15 4 views
8

Mam problem podczas używania% C w ConversionPattern z AsyncAppender.W Log4J, dlaczego% C w ConversionPattern drukuje "?" (znak zapytania) z AsyncAppender?

Moja konfiguracja Lo4J jest:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{yyyy/MM/dd HH:mm:ss,SSS} %C{1} - %m%n" /> 
     </layout> 
    </appender> 
    <appender name="async_console" class="org.apache.log4j.AsyncAppender"> 
     <param name="BufferSize" value="1000" /> 
     <appender-ref ref="console" /> 
    </appender> 
    <root> 
     <level value="debug" /> 
     <!-- 
     <appender-ref ref="console" /> 
     --> 
     <appender-ref ref="async_console" /> 
    </root> 
</log4j:configuration> 

A mój kod test jest:

@Test 
public void testAsync() { 
    DOMConfigurator 
      .configure("src/test/resources/learningtest/log4j/log4j_test_async.xml"); 
    Logger log = Logger.getLogger(getClass()); 
    log.debug("Hello, world!"); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

Wynik testu jest kod:

2012/03/15 11: 51: 22.570? - Witaj świecie!

Bez AsynAppender, to działa dobrze:

2012/03/15 11: 51: 06.002 Log4jTest - Hello, world!

Z% c (kategoria) również działa poprawnie.

Czego mi brakuje?

Proszę dać mi znać.

góry dzięki :-)

referencyjny:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

Odpowiedz

9

Przy zastosowaniu "% C" lub "% m", Log4J używa Throwable.getStackTrace uzyskać StackTrace i użyj tych informacji, aby uzyskać klasę i metodę dzwoniącego. Problem polega na tym, że podczas korzystania z AsyncAppender, Throwable jest tworzony w innym wątku, a stackTrace nie zawiera metody wywołującej.

+5

AsyncAppender ma również flagę locationInfo, którą można ustawić. W takim przypadku% C i% M będą działać zgodnie z oczekiwaniami – cchabanois

+0

, a następnie jak rozwiązać problem? –

Powiązane problemy