2011-05-30 9 views
10

मैं log4j ConsoleAppender किसी समस्या का सामना कर रहा हूँ:ConsoleAppender क्यों फेंक रहा है "नामक [null] नामक एपेंडर के लिए कोई आउटपुट स्ट्रीम या फ़ाइल सेट नहीं है?

अगर मैं इस तरह यह प्रारंभ:

ConsoleAppender ca = new ConsoleAppender(); 
ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)); 

यह एक त्रुटि देता है और प्रवेश टूट जाता है।

त्रुटि आउटपुट:

log4j: त्रुटि कोई उत्पादन स्ट्रीम या appender नामित [अमान्य] के लिए फ़ाइल सेट।

तो मैं इसे इस तरह से प्रारंभ यह ठीक काम करता है:

ConsoleAppender ca = new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)); 

किसी को भी इस समस्या आ रही है? मैं इसे बगजिला भंडार में नहीं ढूंढ सकता, लेकिन अगर यह प्रभावी रूप से एक मुद्दा था तो यह काफी स्पष्ट होगा!

शायद मैं कर रहा हूँ looking in the wrong place?

प्रासंगिक कोड:

import org.apache.log4j.*; 

public class ConsoleAppenderIssue { 
private static Logger logger = Logger.getLogger(ConsoleAppenderIssue.class); 

public static void main(String [] args) { 
    ConsoleAppender ca = new ConsoleAppender(); 
    ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)); 

    logger.addAppender(ca); 

    logger.info("log something"); 

} 

} 

उत्तर

16

आप देख सकते हैं क्यों यह हो रहा है अगर आप ConsoleAppender के लिए look at the source:

public ConsoleAppender(Layout layout) { 
    this(layout, SYSTEM_OUT); 
    } 

    public ConsoleAppender(Layout layout, String target) { 
    setLayout(layout); 
    setTarget(target); 
    activateOptions(); 
    } 

आप देख सकते हैं ConsoleAppender(Layout) गुजरता है कि SYSTEM_OUT लक्ष्य के रूप में, और यह भी लेआउट और लक्ष्य सेट करने के बाद activateOptions पर कॉल करता है।

यदि आप setLayout स्वयं का उपयोग करते हैं, तो आपको लक्ष्य को स्पष्ट रूप से सेट करने और activateOptions पर कॉल करने की भी आवश्यकता होगी।

+2

बढ़िया! तुम मेरी बहुत मदद करते हो। मुझे यह नहीं मिला है क्योंकि अपवाद उठने के लिए मैंने लॉग विधि को डीबग किया था। लेकिन यह काफी गहरा है और जब पाया जाता है, यह समाधान प्राप्त करने में मदद नहीं करता है। ConsoleAppender कन्स्ट्रक्टर के अंदर देखा और समझा। धन्यवाद! – AgostinoX

+0

@skaffman क्या आप मेरे प्रश्न http://stackoverflow.com/questions/30215944/secure-encrypt-log4j-files के साथ मदद कर सकते हैं – shareef

संबंधित मुद्दे