2009-02-21 13 views

उत्तर

103

सेट स्तर रवाना (डीबग के बजाय, जानकारी, ....)

10

आप बंद है जो सभी प्रवेश से छुटकारा पाने के लिए करना चाहिए स्तर बदल सकते हैं। Log4j वेबसाइट के अनुसार, महत्व के क्रम में मान्य स्तर ट्रे, डेबग, सूचना, चेतावनी, त्रुटि, फाटल हैं। one undocumented level को ओएफएफ कहा जाता है जो FATAL से उच्च स्तर है, और सभी लॉगिंग बंद कर देता है।

आप कुछ भी लॉग (लॉग ऑफ ऑफ) लॉग करने के लिए अतिरिक्त रूट लॉगर भी बना सकते हैं, ताकि आप रूट लॉगर्स को आसानी से स्विच कर सकें। Here's a post आपको उस पर शुरू करने के लिए।

आप Log4J FAQ, भी पढ़ना चाहेंगे क्योंकि मुझे लगता है कि सभी लॉगिंग बंद करने से मदद नहीं मिल सकती है। यह निश्चित रूप से आपके ऐप को तेज़ नहीं करेगा, क्योंकि लॉगिंग कोड को वैसे भी निष्पादित किया जाता है, उस बिंदु तक जहां log4j निर्णय लेता है कि उसे इस प्रविष्टि को लॉग इन करने की आवश्यकता नहीं है।

+0

और ट्रेस के नीचे "स्तर" सभी, विपरीत की तरह क्या है। दूसरा, यह प्रोग्राम तेज हो सकता है यदि प्रोग्राम कुछ ऐसा करता है "if (logger.isDebugEnabled()) logger.debug (...)" –

+0

ओपी सभी लॉगिंग को बंद करने के कारण के रूप में प्रदर्शन का उल्लेख नहीं करता है। जब मुझे ऐसा करने की ज़रूरत होती है, तो ऐसा इसलिए होता है क्योंकि कई पुस्तकालय एक प्रकार की लॉगिंग डाइसेंटरी से पीड़ित होते हैं, जो कोई उपयोगी जानकारी नहीं पैदा करता है और मैं इससे निपटने का एक छोटा सा तरीका चाहता हूं। –

68

आप प्रोग्राम लॉगिंग को बंद करना चाहते हैं तो आप क्या चाहते हैं के लिए

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers()); 
loggers.add(LogManager.getRootLogger()); 
for (Logger logger : loggers) { 
    logger.setLevel(Level.OFF); 
} 
+5

उन्होंने "log4j.properties फ़ाइल का उपयोग करके" निर्दिष्ट किया है, वैसे भी यह बहुत उपयोगी है। –

+0

धन्यवाद, बस जो मैं चाहता था। –

+0

और आप लॉगर्स को पिछली सेटिंग (प्रोग्रामेटिक रूप से) पर कैसे वापस लाते हैं? –

4

स्तर बदलें का उपयोग करें। (मैं Log4j2, संस्करण 2.6.2 का उपयोग कर रहा हूँ)। यह सबसे आसान तरीका है, <Root level="off">

उदाहरण के लिए करने के लिए परिवर्तन: फ़ाइल log4j2.xml
विकास पर्यावरण

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <Console name="SimpleConsole" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%msg%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Root level="error"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
    <Loggers> 
     <Root level="info"> 
      <AppenderRef ref="SimpleConsole"/> 
     </Root> 
    </Loggers> 
</Configuration> 

उत्पादन परिवेश

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <Console name="SimpleConsole" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%msg%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Root level="off"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
    <Loggers> 
     <Root level="off"> 
      <AppenderRef ref="SimpleConsole"/> 
     </Root> 
    </Loggers> 
</Configuration> 
3

इसके अलावा, यह भी चालू करने के लिए संभव है प्रोग्रामेटिक रूप से लॉगिंग:

Logger.getRootLogger().setLevel(Level.OFF); 

या

Logger.getRootLogger().removeAllAppenders(); 
Logger.getRootLogger().addAppender(new NullAppender()); 
+1

यह स्टैंडअलोन ऐप्स के लिए सबसे अच्छा समाधान है जो कुछ भी लॉग नहीं करना चाहिए। – basZero

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