2009-02-06 13 views
5

मैं जावा एप्लिकेशन के लिए लॉगिंग कॉन्फ़िगर कर रहा हूं। जो मैं लक्ष्य रख रहा हूं वह दो लॉग है: सभी संदेशों के लिए एक और एक निश्चित स्तर से ऊपर के संदेशों के लिए।java.util.logging से अलग जानकारी और ERROR लॉग

ऐप java.util.logging.* कक्षाओं का उपयोग करता है: मैं इसका उपयोग कर रहा हूं, इसलिए मैं logging.properties फ़ाइल के माध्यम से कॉन्फ़िगरेशन तक सीमित हूं।

मैं दो FileHandlers अलग ढंग से कॉन्फ़िगर करने के लिए एक तरह से नहीं दिख रहा है: डॉक्स और उदाहरण मैं जैसे गुणों को सेट देखा है:

java.util.logging.FileHandler.level = INFO 

मैं दो अलग अलग फ़ाइलों के लिए विभिन्न स्तरों पर प्रवेश करने के हैंडलर चाहते हैं।

कोई सुझाव?

उत्तर

4

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html सहायक है। आप किसी भी व्यक्तिगत लॉगर के लिए केवल एक स्तर सेट कर सकते हैं (जैसा कि आप लॉगर पर setLevel() विधि से बता सकते हैं)। हालांकि, आप दो सामान्य स्तरों में से सबसे कम ले सकते हैं, और फिर प्रोग्रामेटिक रूप से फ़िल्टर कर सकते हैं।

दुर्भाग्यवश, आप इसे कॉन्फ़िगरेशन फ़ाइल के साथ नहीं कर सकते हैं। केवल कॉन्फ़िगरेशन फ़ाइल के साथ स्विच करने के लिए आपको log4j जैसे कुछ पर स्विच करना होगा, जो आपने कहा है वह एक विकल्प नहीं है।

तो मैं कोड में प्रवेश फेरबदल, फिल्टर के साथ, कुछ इस तरह से सुझाव है:

class LevelFilter implements Filter { 
    private Level Level; 
    public LevelFilter(Level level) { 
     this.level = level; 
    } 
    public boolean isLoggable(LogRecord record) { 
     return level.intValue() < record.getLevel().intValue(); 
    } 
} 

और फिर दूसरा हैंडलर पर, setFilter (नई LevelFilter (Level.INFO)) या जो कुछ भी करते हैं। यदि आप इसे कॉन्फ़िगर करने योग्य फ़ाइल चाहते हैं तो आप लॉगिंग गुण सेटिंग का उपयोग कर सकते हैं जो आपने स्वयं बनाया है, और सामान्य गुण विधियों का उपयोग करें।

मुझे लगता है कि आपके पास डिज़ाइन होने के बाद प्रोग्रामेटिक कोड के दो प्रोग्राम हैंडलर सेट करने के लिए कॉन्फ़िगरेशन कोड काफी सरल है, लेकिन यदि आप अधिक जानकारी चाहते हैं तो कोई टिप्पणी जोड़ें और मैं संपादित करूंगा।

+0

उत्तर के लिए धन्यवाद। मुझे बस यह समझ में नहीं आता है कि आप कोड लिखने के बिना विभिन्न स्थानों पर विभिन्न गंभीरता के संदेशों को लॉग नहीं कर सकते हैं। – user63196

+0

हां, यही कारण है कि बहुत से लोग log4j का उपयोग करते हैं –

0

मुझे लगता है कि आप केवल एक हैंडलर को उपclass करने में सक्षम होना चाहिए और फिर संदेश के स्तर के आधार पर आउटपुट को एकाधिक फ़ाइलों पर जाने की अनुमति देने के तरीकों को ओवरराइड करना चाहिए। यह प्रकाशित() विधि को ओवरराइड करके किया जाएगा।

वैकल्पिक रूप से, अगर आप प्रणाली के द्वारा उपलब्ध कराया FileHandler उपयोग करने के लिए है, तो आप एक setFilter() इस पर है कि फिल्टर कोड में मिश्रण में अपने स्वयं के फिल्टर सुई और,, कर सकता है अपने अन्य फाइल करने के लिए सभी संदेश भेजने और यदि सही है तो LogRecord स्तर यदि INFO या उच्चतर है, तो FileHandler.publish() को वास्तविक फ़ाइल में लिखने का कारण बनता है।

मुझे यकीन नहीं है कि आपको फ़िल्टर का उपयोग करना चाहिए, लेकिन मैं नहीं देख सकता कि यह क्यों काम नहीं करेगा।

+0

मैं इस एप्लिकेशन का उपयोग कर रहा हूं - मैं यहां कोड लिखना नहीं चाहता हूं: बस एक प्रॉपर्टी फ़ाइल से लॉगिंग कॉन्फ़िगर करें। – user63196

+0

फिर यह नहीं किया जा सकता है। आप जो मांग रहे हैं वह लॉगिंग सिस्टम की सुविधा नहीं है जिसका आप उपयोग कर रहे हैं। अगर आपको इसका उपयोग करना है, तो आप भाग्य से बाहर हैं, मुझे डर है। – paxdiablo

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