2010-05-05 20 views
24

मेरे पास एक होस्ट और प्लग करने योग्य मॉड्यूल (प्लगइन्स) शामिल है।log4net - एकाधिक कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके कॉन्फ़िगर करें

मैं मेजबान के लिए और अन्य मॉड्यूल के लिए log4net को कॉन्फ़िगर करने में सक्षम होना चाहता हूं। उनमें से प्रत्येक की अपनी कॉन्फ़िगरेशन फ़ाइल होनी चाहिए और प्रत्येक एक अलग फ़ाइल पर लॉग इन करेगा।

केवल होस्ट में एक App.config फ़ाइल है। प्लगइन्स में अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल होती है जिसमें log4net कॉन्फ़िगरेशन अनुभाग होते हैं।

कॉलिंग XmlConfigurator. प्लगइन में से एक कॉन्फ़िगर करें होस्ट की app.config log4net परिभाषाओं को ओवरराइड करता है।

क्या उन्हें ओवरराइड करने के बजाय कॉन्फ़िगरेशन जोड़ने का कोई आसान तरीका है?

धन्यवाद, गाई।

उत्तर

2

मैं बस इस समस्या में खुद भाग गया। हालांकि यह बिल्कुल सही नहीं है कि मैं "आदर्श" कहूंगा, मुझे लगता है कि XmlConfigurator वर्ग की ConfigureAndWatch विधि का उपयोग करना सबसे अच्छा समाधान है। असल में, आपके पास मेजबान असेंबली एक विशिष्ट कॉन्फ़िगरेशन फ़ाइल का उपयोग कर log4net कॉन्फ़िगरेशन सेट अप करती है। जब आपके प्लगइन लोड होते हैं, तो उन्हें उसी कॉन्फ़िगरेशन फ़ाइल में log4net कॉन्फ़िगरेशन अनुभाग में उनके कॉन्फ़िगरेशन तत्व लिखते हैं। चूंकि लॉग 4नेट को उस फ़ाइल को ConfigureAndWatch के साथ बदलने के लिए कहा गया है, जब फ़ाइल में नया डेटा जोड़ा गया है, तो log4net कॉन्फ़िगरेशन को फिर से लोड करेगा जो अब प्लगइन से कॉन्फ़िगरेशन तत्वों को शामिल करेगा।

यह थोड़ा सा हैकिश है, लेकिन ऐसा लगता है कि यह काम करता है। पाठ्यक्रम का अगला चरण इसे मेरे लॉगिंग फ्रेमवर्क में ले जायेगा ताकि कॉन्फ़िगरेशन फ़ाइल तक पहुंच फ़ेडरेटेड हो।

ध्यान दें करो प्लगइन के विन्यास के बीच में थोड़ा विलंब लिखा जा रहा/बचाया और अद्यतन विन्यास पुनः लोड और लकड़हारा भंडार करने के लिए लागू किया जा रहा है कि वहाँ।

+0

धन्यवाद स्टुअर्ट, मैं इसे एक कोशिश दे देंगे। – Gai

16

ऐसा प्रतीत होता है कि आपको पहले से ही एक समाधान मिला है जो आपके लिए काम करता है। हालांकि, मैं एक अलग समाधान जो मैं "अधिक आदर्श" पर विचार मिल गया है, तो मैं इसे यहाँ जो कोई भी भविष्य में इस सवाल मिल सकती है के लिए पोस्ट करेंगे।

लॉग 4नेट में एक अवधारणा है जिसे रिपोजिटरी कहा जाता है जिसे अलग से कॉन्फ़िगर किया जा सकता है। यह न बहुत लोकप्रिय है और न ही बहुत अच्छी तरह से प्रलेखित है, लेकिन यहां कुछ प्रलेखन मैंने पाया है:

http://logging.apache.org/log4net/release/manual/repositories.html

वैसे भी, तुम सब करने की जरूरत है एक रिपोजिटरी नाम है कि प्लगइन के लिए अद्वितीय और के साथ अपने प्लगइन विधानसभा या विधानसभाओं पर RepositoryAttribute जोड़ने है log4net इसे सब कुछ से अलग रखेगा।

4

फिर भी एक और तरीका एकाधिक स्थानों में एकाधिक लॉग 4नेट कॉन्फ़िगरेशन फ़ाइलों को रखना है, उन्हें एक को प्रभावी ढंग से लिखने के लिए XDocument में लोड करें, और फिर XmlConfigurator.Configure() पर कॉल करें। जिस तरह से मैं ऐसा किया, विन्यास के लिए XSD निम्नलिखित प्रत्येक फ़ाइल बनाने के अलग XElement उदाहरणों में प्रत्येक फ़ाइल के log4net रूट नोड के सभी बच्चों को लोड और उन्हें एक जड़ log4net नोड के साथ एक नया XDocument में विलय किया गया था। मैं कोड के साथ इस जवाब से अपडेट कर देंगे (यह इस समय मेरे सामने नहीं है) करता है, तो किसी को भी आगे रुचि है।

फ़ाइलों को ढूंढना एक और मामला है: फ़ाइलों के लिए स्कैन करने के लिए कुछ प्रकार के सम्मेलन का उपयोग करें (उदा। *.dll.log4net.config), उन्हें असेंबली में एम्बेड करें, या कुछ।

इस तरह के कोड का एक कार्यान्वयन पर पाया जा सकता है:

www.kopf.com.br/kaplof/using-multiple-configuration-files-with-log4net

+0

आप यह कैसे करेंगे? एक अच्छा समाधान की तरह लगता है। ऐसा लगता है कि आपको केवल एक ही "log4net" टैग रखने और उस टैग की सामग्री को मर्ज करने की आवश्यकता है क्योंकि यह गैर-तुच्छ लगता है। – Wayne

+0

मैंने थोड़ा और विवरण के साथ अपना जवाब अपडेट किया। यह बहुत अधिक कोड न लेने के लिए बाहर निकलता है, और अतिरिक्त निर्माण चरणों का उपयोग किए बिना प्रति वातावरण अलग-अलग लॉगिंग सेटिंग्स के लिए इसके लायक था। – Kit

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