2012-03-15 7 views
8

AsyncAppender के साथ रूपांतरणपटल में% C का उपयोग करते समय मुझे कोई समस्या है।लॉग 4 जे में, क्यों रूपांतरण सी में% सी प्रिंट करता है '?' (प्रश्न चिह्न) AsyncAppender के साथ?

मेरे Lo4J विन्यास है:

<?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> 

और मेरे परीक्षण कोड है:

@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(); 
    } 
} 

परीक्षण कोड का परिणाम है:

2012/03/15 11: 51: 22,570? - नमस्ते दुनिया!

AsynAppender के बिना, यह ठीक काम करता है:

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

% सी (श्रेणी) के साथ, यह भी ठीक काम करता है।

मुझे क्या याद आ रही है?

कृपया मुझे बताएं।

अग्रिम धन्यवाद :-)

संदर्भ:

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

उत्तर

9

"% सी" या "% एम" का उपयोग कर, log4j Throwable.getStackTrace का उपयोग करता स्टैकट्रेस पाने के लिए और कॉलर कक्षा और विधि प्राप्त करने के लिए इस जानकारी का उपयोग करें। समस्या यह है कि एक AsyncAppender का उपयोग करते समय, थ्रोबल अन्य थ्रेड में बनाया गया है और स्टैकट्रेस में कॉलर विधि नहीं है।

+5

AsyncAppender में एक स्थान इन्फ्लो ध्वज भी है जिसे आप सेट कर सकते हैं। इस मामले में,% सी और% एम अपेक्षित – cchabanois

+0

के रूप में काम करेगा तो समस्या को ठीक करने के लिए कैसे? –