2011-02-15 26 views
20

मेरे पास एक साधारण कंसोल ऐप है जो अपाचे की पीडीएफबॉक्स लाइब्रेरी का उपयोग करता है, जो बदले में कॉमन्स लॉगिंग का उपयोग करता है।apache commons लॉगिंग के लिए लॉगिंग स्तर समायोजित करें?

15 फ़र,, 2011 15:56:40 org.apache.pdfbox.util.PDFStreamEngine processOperator जानकारी:: मैं जो मैं दबाना पसंद मेरे कंसोल में कबाड़ संदेशों का एक बहुत हो रही है असमर्थित/विकलांग आपरेशन: ईआई

मेरे कोड में, मैं कोई लाभ नहीं हुआ लॉग स्तरों रीसेट करने की कोशिश की है:

Logger.getLogger("org.apache.pdfbox.util.PDFStreamEngine").setLevel(Level.OFF); 
Logger.getLogger("org.apache.pdfbox.util").setLevel(Level.OFF); 
Logger.getLogger("org.apache.pdfbox").setLevel(Level.OFF); 

इन सेटिंग्स के बावजूद, संदेश अभी भी कंसोल पर दिख रहे हैं। कॉमन्स लॉगिंग से लॉग ऑब्जेक्ट को पुनर्प्राप्त करना या तो मदद नहीं करता है, क्योंकि ऐसा लगता है कि यह स्तर सेट करने का कोई तरीका नहीं है।

क्या इन संदेशों को प्रोग्रामेटिक रूप से दबाने का कोई तरीका है? या मुझे एक कॉन्फ़िगरेशन फ़ाइल जोड़ने की ज़रूरत है?

उत्तर

5

कॉमन्स-लॉगिंग केवल एक लॉगिंग-मुखौटा है, जिसका अर्थ है कि यह कोड प्रदान नहीं करता है जो वास्तव में लॉगडाटा को लिखता है, डिस्क। आपको बदलने की आवश्यकता है वास्तविक लॉगिंग कार्यान्वयन (जैसे logback, log4j, sl4fj आदि) के लिए कॉन्फ़िगरेशन। यदि ऐसी कोई पुस्तकालय नहीं मिली है तो यह java.util.logging पर डिफ़ॉल्ट है।

मैं क्लासपाथ में उदा। log4j डालने की सलाह दूंगा और अपने क्लासपाथ में log4j.xml कॉन्फ़िगरेशन फ़ाइल जोड़ूंगा। क्लासपाथ में log4j की उपस्थिति इस मामले में शुरू करने के लिए पर्याप्त है। Log4j भी programmatically कॉन्फ़िगर किया जा सकता है।

+0

मैं जावा लॉगिंग का उपयोग कर रहा हूं (यानी मेरे पास कोई अन्य लॉगिंग लाइब्रेरी मौजूद नहीं है)। और फिर भी यह Java.util.logger पर स्तर के विनिर्देश को अनदेखा कर रहा है। – user364902

+0

आप एक [गुण] (http://www.java-tips.org/java-se-tips/java.util.logging/how-to-configure-a-logger-default-values-with-a के साथ कर सकते हैं -properties.html) फ़ाइल, हालांकि मैं आमतौर पर सलाह देता हूं [विरुद्ध] (http://java.sys-con.com/node/48541) java.util.logging। –

1

अपाचे कॉमन्स-लॉगिंग (java.util.logging या लॉग 4 जे) के नीचे कुछ अन्य लॉगिंग फ्रेमवर्क का उपयोग करता है, आपको जांचना होगा कि यह आपके प्रोजेक्ट पर कौन सा उपयोग करता है और वहां उचित लॉगिंग स्तर निर्धारित करता है।

+0

मैं जावा लॉगिंग का उपयोग कर रहा हूं (यानी मेरे पास कोई अन्य लॉगिंग लाइब्रेरी मौजूद नहीं है)। और फिर भी यह Java.util.logger पर स्तर के विनिर्देश को अनदेखा कर रहा है। – user364902

2

यह मेरे लिए काम करता है:

String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine", 
     "org.apache.pdfbox.pdmodel.font.PDSimpleFont" }; 
for (String logger : loggers) { 
    org.apache.log4j.Logger logpdfengine = org.apache.log4j.Logger 
     .getLogger(logger); 
    logpdfengine.setLevel(org.apache.log4j.Level.OFF); 
} 
1

मामले में आप जो लॉगिंग कार्यान्वयन के नीचे अपाचे कॉमन्स-लॉगिंग द्वारा प्रयोग किया जाता है यह पता लगाने की समय नहीं है, सब कर रहे हैं कि आप में क्लासपाथ निष्क्रिय करने के लिए प्रयास करें। निम्नलिखित कोड तीन कार्यान्वयन का परीक्षण करता है।

यदि कोई भी लाइन संकलित नहीं करती है, तो निर्भरता को न जोड़ें! बस लाइन को हटा दें।

String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine", 
    "org.apache.pdfbox.pdmodel.font.PDSimpleFont", "httpclient.wire.header" , "httpclient.wire.content" 
for (String ln : names) { 
    // Try java.util.logging as backend 
    java.util.logging.Logger.getLogger(ln).setLevel(java.util.logging.Level.WARNING); 

    // Try Log4J as backend 
    org.apache.log4j.Logger.getLogger(ln).setLevel(org.apache.log4j.Level.WARN); 

    // Try another backend 
    Log4JLoggerFactory.getInstance().getLogger(ln).setLevel(java.util.logging.Level.WARNING); 
}