2009-09-17 17 views
30

मैं अपने स्टैंडअलोन एप्लिकेशन में अपाचे कॉमन लॉगिंग लाइब्रेरी का उपयोग कर रहा हूं। वेब के माध्यम से खोज करने के बाद, मैंअपाचे सामान्य लॉगिंग बंद करें

package javaapplication1; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

/** 
* 
* @author yccheok 
*/ 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 

     log.info("You do not want to see me"); 
    } 

    private static final Log log = LogFactory.getLog(Main.class); 
} 

का उपयोग करके लॉगिंग को बंद करने का प्रयास करता हूं, हालांकि, मैं अभी भी लॉग संदेश मुद्रित देख सकता हूं। क्या मुझे पता चलेगा कि मुझे क्या याद आया?

मैं commons-logging.properties में

# Sample ResourceBundle properties file 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog 

डालकर लॉगिंग बंद कर सकते हैं।

हालांकि, मेरे विकास के समय के दौरान, मेरे नेटबीन्स को यह नहीं पता कि कॉमन्स-logging.properties कहां प्राप्त करें, और कभी-कभी मुझे विकास के समय लॉगिंग बंद करने की आवश्यकता होती है।

उत्तर

42

के रूप में अन्य लोगों ने बताया है, यह हो रहा है वस्तु आप गुण सेट से पहले क्योंकि आप लॉग पैदा करते हैं। इस के आसपास

एक तरह से अपने Main वर्ग 'स्थिर initialiser ब्लॉक में गुण सेट करने के लिए हो सकता है - यह जब वर्ग पहले भरी हुई है चलाने जाएगा, और इससे पहले कि स्थिर अंतिम लॉग बनाई गई है:

public class Main { 

    static { 
     System.setProperty("org.apache.commons.logging.Log", 
         "org.apache.commons.logging.impl.NoOpLog"); 
    } 

    // Rest of class as before 
} 
+4

यह सिर्फ काम करता है। मैं आपके सुझाव से खुश हूं। –

+0

क्या आप जानते हैं कि org.apache.commons.logging को अक्षम कैसे करें। JRuby में लॉग इन करें? मैं इसका उपयोग कर रहा हूं: 'जरूरी' जावा 'जावा :: lang.static { जावा :: lang.System.setProperty ("org.apache.commons.logging.Log", "org.apache.commons.logging.impl। NoOpLog ") }' लेकिन यह कुछ भी नहीं करता ... – user3719188

+0

महान विचार !!! (+1) !!! – DebanjanB

5

लॉगिंग को नियंत्रित करने के लिए slf4j प्रोजेक्ट का उपयोग करने के लिए - एक अलग दृष्टिकोण हो सकता है - जबकि एक अलग दृष्टिकोण हो सकता है।

अपाचे कॉमन्स को sljf4 के साथ लॉगिंग करने के लिए पुल लॉगिंग करने वाले कमांड का उपयोग करके और फिर उपयुक्त लॉगिंग बैकएंड का उपयोग करें। जैसे slf4j सरल या एनओपी कार्यान्वयन आपके लिए उचित होगा। ये केवल कुछ जार हैं जिन्हें आप अपने क्लासपाथ में छोड़ देते हैं।

http://www.slf4j.org/legacy.html#jcl-over-slf4j

3

समस्या देखें अपने उदाहरण के साथ कि प्रवेश स्तर के गुण सेट करने से पहले instantiated जाता है। यदि संपत्ति सेट होने के बाद आप लॉग इंस्टेंस बनाते हैं तो उदाहरण ठीक से काम करता है। उदाहरण के लिए आप इसे मुख्य विधि में स्थानांतरित करता है, तो:

package javaapplication1; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

/** 
* 
* @author yccheok 
*/ 
public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     System.setProperty("org.apache.commons.logging.Log", 
          "org.apache.commons.logging.impl.NoOpLog"); 
     Log log = LogFactory.getLog(Main.class); 

     log.info("You do not want to see me"); 
    } 

} 
6

जैसा कि अन्य ने इंगित किया है, आपके log इंस्टेंस को सिस्टम प्रॉपर्टी सेट होने से पहले तुरंत चालू किया गया है, जो बहुत जल्दी है।

यह सुनिश्चित करने के लिए कि यह सही समय पर सेट है, अपने JVM में -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog पास करने का प्रयास करें।

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