जावा में लॉग 4 जे आउटपुट को अक्षम करना


87

फ़ाइल का उपयोग करके सभी लॉग 4 जे आउटपुट को जल्दी से कैसे बंद किया जा सकता है log4j.properties?

जवाबों:



79

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

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

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

1
धन्यवाद, मैं जो चाहता था।
जोस मार्टिनेज

और आप लॉगर्स को पिछली सेटिंग (प्रोग्रामिक रूप से) में कैसे वापस लाएंगे?
सचिन शर्मा

कोई जादू नहीं, बस साधारण प्रोग्रामिंग। वर्तमान स्तर को मैप <लकड़हारा, स्तर> में लंबे समय तक रहने वाले संदर्भ में स्टोर करें और फिर एंट्री सेट ई.गेटकेय () पर सेट करके पुन: परिवर्तित करें। सेटवेल (e.getValue ())
एंड्रयू


14

आप उस स्तर को बंद कर सकते हैं जिसे सभी लॉगिंग से छुटकारा मिलना चाहिए। Log4j वेबसाइट के अनुसार, महत्व के क्रम में मान्य स्तर TRACE, DEBUG, INFO, WARN, ERROR, FATAL हैं। वहाँ एक अनिर्दिष्ट स्तर है जिसे OFF कहा जाता है जो FATAL की तुलना में उच्च स्तर है, और सभी लॉगिंग को बंद कर देता है।

आप कुछ भी नहीं (स्तर ऑफ) लॉग करने के लिए एक अतिरिक्त रूट लॉगर बना सकते हैं, ताकि आप रूट लॉगर को आसानी से स्विच कर सकें। यहाँ एक पोस्ट है जो आपको आरंभ करने के लिए है।

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


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

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

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>

4

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

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

या

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

ये आयात का उपयोग करते हैं:

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;

1
यह स्टैंडअलोन ऐप के लिए सबसे अच्छा समाधान है जो कुछ भी लॉग नहीं करना चाहिए।
बेसजेरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.