मैं क्रम में अपने प्रवेश के प्रबंध मॉड्यूल है, लेकिन सब कुछ एक अखंड कॉन्फ़िग फ़ाइल की चर्चा करते हुए बिना करना चाहते हैं। विभिन्न अनुमतियों के तहत चल रही प्रक्रियाओं से निपटने पर, मैं वास्तव में सिस्टम पर हर लॉग तक पहुंचने में सक्षम होने के लिए प्रत्येक प्रक्रिया से निपटना नहीं चाहता हूं, जब वे केवल उनके उप-समूह में लिख रहे हों।Log4perl: मैं रनटाइम पर गतिशील रूप से परिशिष्ट कैसे लोड करूं?
हालांकि, मुझे लॉग 4perl मैन्युअल में अतिरिक्त दस्तावेज़ों को रनटाइम पर कॉन्फ़िगरेशन फ़ाइल से प्रारंभ करने के तरीके पर अधिक प्रलेखन नहीं मिल रहा है। http://metacpan.org/pod/Log::Log4perl::Appender एक add_appender विधि का संदर्भ देता है, लेकिन यह फ़ाइलों को कॉन्फ़िगर करने के बजाय तत्काल एपेंडर ऑब्जेक्ट्स पर काम करता है। यह लॉगर ऑब्जेक्ट्स और लॉगर-> एपेंडर रिलेशनशिप को भी परिभाषित नहीं करता है।
मैंने प्रत्येक पैकेज को अपने स्वयं के confit से रखने की कोशिश की, लेकिन यह हर बार जब यह initalized मौजूदा कॉन्फ़िगरेशन clobbers।
my $foo = Foo->new() ## Checks Log::Log4perl::initialized(), sees that it
## hasn't been initalized yet, inits Log4perl from foo.conf
my $bar = Bar->new() ## Checks Log::Log4perl::initialized(), sees that it
## has been initalized. Adds appenders and loggers defined
## in bar.conf into the initialized configuration
मैं कैसे पार्स और वर्तमान config में विन्यास जोड़ सकते हैं: की तर्ज पर कुछ मुझे क्या करना चाहते हैं?
संपादित करें: एक पैकेज वैरिएबल का उपयोग करने के साथ प्रोबेलम यह है कि यह विभिन्न वर्गों द्वारा खाया जाने वाला एक मूस भूमिका है, जो कि सिर्फ एक मूसएक्स :: भूमिका :: Making self-logging modules with Log::Log4perl में ईथर के उत्तर का पैरामीटर संस्करण है। इस प्रकार, मेरा लॉगर इसे उपभोग करने वाली लाइब्रेरी में बना रहा है, और मेरे पास वैश्विक वैरिएबल नहीं है जिसे मैं हर बार उपयोग करने पर काम कर सकता हूं।
हालांकि ..
अगर मैं MooseX :: भूमिका के बाहर एक वैश्विक चर घोषित :: Parameterized भूमिका ब्लॉक, प्रत्येक और हर वर्ग उस भूमिका की खपत है कि एक ही conf चर का उपयोग कर सकता है?
कोई भी? मैंने Log4perl के लिए स्रोत पर थोड़ा सा देखा है लेकिन मैं ऐसा पहला व्यक्ति नहीं बन सकता जो कभी ऐसा करना चाहता था। मैं एक मूस भूमिका मैं वर्गों है कि मुझे भूमिका के लिए एक कॉन्फ़िग फ़ाइल पारित करने के लिए अनुमति देने के लिए आवेदन कर सकते हैं paramererized बनाने के लिए कोशिश कर रहा हूँ, और यह सिर्फ या तो conf फ़ाइल initing या वर्तमान प्रारंभ करने के लिए conf फ़ाइल config जोड़कर सही काम करता है Log4perl। – Oesor
@ ओसर: मूस भूमिका में घोषित होने पर भी पैकेज वैश्विक वैश्विक है। भूमिकाओं का उपयोग करने के लिए नीचे दिए गए समाधान को संशोधित करना आसान होना चाहिए ('बिल्ड' तंत्र के बजाय आप 'इसी तरह के कोड के साथ' BUILDARGS' के आसपास 'उपयोग कर सकते हैं)। – bvr
@ ओसर: प्रति पिछली टिप्पणी के नीचे अद्यतन कोड। – bvr