2012-12-24 24 views
13

क्या रन 4 पर लॉग 4j में कॉन्फ़िगर किए गए सभी एपेंडर्स की एक सूची पुनर्प्राप्त करना संभव है?रन टाइम पर लॉग 4 जे परिशिष्ट की सूची पुनर्प्राप्त करें

मैं परिदृश्य को थोड़ा और अधिक कर दूंगा। निम्न कॉन्फ़िगरेशन को देखते हुए मैं सभी एपेंडर (stdout और altstdout) को कैसे पुनर्प्राप्त करूं?

log4j.rootLogger=error, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.altstdout=org.apache.log4j.ConsoleAppender 
log4j.appender.altstdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
log4j.appender.altstdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
+0

के माध्यम से रूट लॉगर्स के परिशिष्टों को अलग-अलग एक्सेस करना होगा, क्या आप lo4j 1.2 या log4j2 का उपयोग कर रहे हैं? दोनों टैगिंग भ्रमित है क्योंकि उनके पास अलग-अलग एपीआई हैं। – Simulant

उत्तर

11

आप सभी वालों के लिए कॉन्फ़िगर सभी appenders के लिए उपयोग करना चाहते हैं तो आप इस

for (Enumeration loggers=LogManager.getCurrentLoggers(); loggers.hasMoreElements();) { 
    Logger logger = (Logger) loggers.nextElement(); 
    for (Enumeration appenders=logger.getAllAppenders(); appenders.hasMoreElements();) { 
     Appender appender = (Appender) appenders.nextElement(); 
     ... 

मैं नहीं की तरह कुछ करना चाहिए एक है पता है कि log4j में LogManager.getAllAppenders() जैसी कोई विधि क्यों नहीं है, लेकिन यह
हानि जैसा दिखता है।

+0

यह काम करेगा, लेकिन यह हमारी ज़रूरत के लिए वास्तव में प्रासंगिक नहीं था। मैं एक लॉगिंग कॉन्फ़िगरेशन ऐप बना रहा था ताकि हम गतिशील रूप से लॉगर्स बना/संशोधित कर सकें। यह मूल रूप से आवश्यक परिशिष्ट जो वर्तमान में उपयोग में नहीं थे। अंत में मैंने अभी एक लॉगर बनाया जो सभी परिशिष्टों के साथ कॉन्फ़िगर किया गया था और हमेशा बंद करने के लिए सेट किया गया था। – binarymelon

+3

यह log4j के लिए काम कर सकता है लेकिन निश्चित रूप से log4j2 के लिए नहीं, क्योंकि log4j2 में कोई LogManager.getCurrentLoggers() न तो Logger.getAllAppenders() है। – Joe

+1

तो आप log4j2 में यह कैसे करते हैं –

0

यह तुम क्या जरूरत है

log4j Method getAllAppenders

+1

यह सिर्फ लॉगर से जुड़े सभी परिशिष्ट प्राप्त करता है, है ना? – binarymelon

+0

हां, आप परिशिष्ट जोड़ सकते हैं। – vels4j

0

मैं कुछ ऐसा जोड़ना चाहता हूं जो मुझे समझने में थोड़ी देर लगे। यदि आप नीचे दिए गए आंकड़े को देखते हैं (जिसे मैंने here से कॉपी किया है), तो आप देख सकते हैं कि लॉगजर com.foo.bar रूट लॉगर्स फ़ाइल एपेंडर को प्रिंट करेगा, इसकी एपेंडर सूची अभी भी शून्य है। तो आप सभी एपेंडर प्राप्त नहीं कर सकते हैं लॉगर विधि logger.getAllAppenders() विधि के साथ लिखेंगे।

enter image description here

इस आप अलग से सब भी माता-पिता और जड़ लकड़हारा के माध्यम से पुनरावृति करने की आवश्यकता के लिए

। चूंकि आप रूट लॉगर के लिए logger.getParent() को पुन: सक्रिय नहीं कर सकते हैं (रूट लॉगर शून्य लौटाता है - getParent() के दस्तावेज़ देखें)। जहां तक ​​मुझे पता है, आपको Logger.getRootLogger().getAllAppenders().