2011-05-17 11 views
8

मैं लॉग फ़ाइल और अन्य गंतव्यों में अपने एप्लिकेशन के लॉग संदेश लिखने के लिए जावा लॉगिंग का उपयोग कर रहा हूं।awt/swing डीबग (ठीक) लॉग संदेश अक्षम करना

{0}, when grabbed {1}, contains {2} 

और दूसरों: FINE को लॉग स्तर सेट करने के बाद, मैं भी (अवांछित) जैसे AWT/स्विंग से संदेश, मिलता है। जेडीके स्रोत कोड को देखते हुए (उदा। here देखें), कोई देखता है कि संबंधित लॉगर का नाम sun.awt.X11.grab.XWindowPeer है।

जावा लॉगिंग ढांचे से मुझे क्या समझा गया यह है कि इस लॉगिंग हैंडलर को अपने माता-पिता से sun.awt जैसे लूजवेल का उत्तराधिकारी होना चाहिए।

Logger.getLogger("sun.awt").setLevel(Level.OFF); 

लेकिन AWT/घुमाओ डिबग संदेश अभी भी लॉग उत्पादन में दिखाई देते हैं:

मैं निम्नलिखित की कोशिश की।

प्रोग्रामेटिक रूप से इन लॉग संदेशों को अक्षम करने का अनुशंसित तरीका क्या है (जबकि अभी भी FINE अन्य स्रोतों से संदेशों को अनुमति दे रहा है)?

+0

दिखाने के लिए कि कैसे आप अपने लकड़हारा उदाहरण प्राप्त करने और आप इसे कैसे बुला रहे हैं कर रहे हैं अपने प्रश्न अपडेट करें। –

उत्तर

0

लॉगजर.get रूट लॉगर()। सेटलेवल (स्तर.ओएफएफ);

1

मुझे आज भी यही समस्या थी। Google पर खोजना यह शीर्ष यूआरएल है और मुझे जवाब के लिए कोई अच्छा स्रोत नहीं मिला है, इसलिए मैं अपना पोस्ट करूंगा :)

मानते हैं कि आंद्रे java.util.logging एपीआई का उपयोग करता है, तो Handler को नियंत्रित करना संभव है setFormatter(Formatter newFormatter) का उपयोग करके, अपने लॉग का प्रारूप।

इसलिए मैंने Formatter बढ़ाया और जांच की कि लॉग की कक्षा में java.awt, javax.swing या sun.awt है।

class MyFormatLog extends Formatter { 

    @Override 
    public String format(LogRecord record) { 
     if(!record.getSourceClassName().contains("java.awt") && 
     !record.getSourceClassName().contains("javax.swing.") && 
     !record.getSourceClassName().contains("sun.awt.")) { 
      //format my output... 
     } else { 
      return ""; 
     } 
    } 

} 
5

तुम सिर्फ अपने खुद के आवेदन की संदेशों प्रवेश करना चाहते हैं, तो आप सभी संदेशों को निष्क्रिय कर सकते हैं और फिर स्पष्ट रूप से अपने आवेदन के लिए संदेश सक्षम:

Logger.getRootLogger().setLevel(Level.OFF); 
Logger.getLogger("package.of.your.application").setLevel(Level.ALL); 

प्रवेश के लिए गुण-फ़ाइल के अंदर (जैसे logging.properties) इस होगा:

.level = OFF 
package.of.your.application.level = ALL 
+0

सही, धन्यवाद – Aralox

1

मैं लॉगर वर्ग किसी भी मीटर में getRootLogger() विधि नहीं पा सके अयस्क। यह वही मेरे लिए काम करता है:

logger = Logger.getLogger("my.package"); 
Logger l = logger; 
while (l != null) { 
    l.setLevel(Level.OFF); 
    l = l.getParent(); 
}    
logger.setLevel(Level.FINER); 
1
Logger.getLogger("java.awt").setLevel(Level.OFF); 
    Logger.getLogger("sun.awt").setLevel(Level.OFF); 
    Logger.getLogger("javax.swing").setLevel(Level.OFF); 

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

  • कोई संबंधित समस्या नहीं^_^