2010-11-05 12 views
5

मैं ऑफ-द-शेल्फ जावा वेब एप्लिकेशन के लिए एक कस्टम एक्सटेंशन लिख रहा हूं। एप्लिकेशन लॉगिंग के लिए log4j का उपयोग करता है और मैं विशेष रूप से अपने एक्सटेंशन के लिए एक नया लॉगर और एपेंडर जोड़ना चाहता हूं। समस्या यह है कि एप्लिकेशन log4j.properties फ़ाइल का प्रबंधन करता है जो एक व्यवस्थापक स्क्रीन यूआई में चयन के आधार पर गतिशील रूप से जेनरेट किया जाता है। चूंकि यह एक "ऑफ-द-शेल्फ" एप्लिकेशन है, इसलिए मैं स्रोत कोड को संशोधित नहीं कर सकता। इसलिए, यदि मैं फ़ाइल में अपना खुद का लॉगर & एपेंडर जोड़ता हूं, तो यूआई में किसी भी व्यवस्थापक द्वारा लॉगिंग वरीयताओं को बदलने पर इसे ओवरराइट किया जाता है।क्या एकाधिक log4j.properties फ़ाइलों का उपयोग उसी टोमकैट वेब ऐप में किया जा सकता है?

क्या 2 फाइलों से कॉन्फ़िगरेशन प्राप्त करने के लिए log4j प्राप्त करना संभव है?

applog.properties #(Dynamically generated from admin UI) 
mylog.properties #(My static properties) 

इस परिदृश्य में, log4j किसी भी तरह प्रविष्टियों दोनों फ़ाइलों से पूरा विन्यास के लिए गठबंधन होगा: उदाहरण के लिए, मैं निम्नलिखित की तरह कुछ चाहते हैं।

क्या यह संभव है? या क्या अन्य कामकाज हैं?

उत्तर

2

मुझे एकाधिक log4j.properties फ़ाइल को "विलय" करने का कोई तरीका नहीं मिला, लेकिन मुझे एक व्यावहारिक समाधान मिला। log4j कॉन्फ़िगरेशन को नीचे दिए गए कोड स्निपेट के समान रनटाइम पर प्रोग्रामेटिक रूप से छेड़छाड़ की जा सकती है। यह log4j.properties फ़ाइल द्वारा परिभाषित विन्यास में मेरी कस्टम log4j सेटिंग्स को प्रभावी ढंग से विलय कर दिया, जो मेरे मामले में मैं संपादित नहीं कर सका।

// Init custom logging 

// Define layout 
PatternLayout layout = new PatternLayout(); 
layout.setConversionPattern("%d [%-5p] -- %m%n"); 

// Create appender 
RollingFileAppender appender = new RollingFileAppender(); 
appender.setFile(LOG_PATH); 
appender.setMaxFileSize("2MB"); 
appender.setMaxBackupIndex(0); 
appender.setLayout(layout); 
appender.activateOptions(); // It didn't work without this 

// Get our logger and add appender. 
log = Logger.getLogger("[MyCustomLogger]"); 
log.setLevel(YOUR_LOGGING_LEVEL_HERE); 
log.addAppender(appender); 
संबंधित मुद्दे

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