2010-07-15 10 views
8

मैं लिखने वाले किसी भी एप्लिकेशन, सेवा इत्यादि में लॉगिंग के लिए उपयोग करने के लिए एक सारणी पुस्तकालय लिख रहा हूं। मैं इसे अधिकतर एप्लिकेशन/सेवा लॉगिंग परिदृश्यों के लिए अपनी आवश्यकताओं के अनुरूप बनाने के लिए इसे बहुत विन्यास बनाकर दृढ़ता से मजबूत बना रहा हूं।मेरी डीएलएल असेंबली में एक App.config लागू करें?

config जैसे बातें निर्दिष्ट करने के लिए बनाया गया है:

  • क्या लॉगिंग स्तर सभी स्तरों के लिए
  • लिखें एक करने के लिए लॉग फ़ाइल लिखने के लिए
  • लिखें स्तर
  • प्रति फ़ाइलों को अलग करने के
  • लॉगिंग कटऑफ (आवधिक, ऐप इवेंट, बाइट आकार प्रतिबंधित)
  • लॉग फ़ाइल समाप्ति (फ़ाइल आयु के बाद लॉग फ़ाइलों को हटाएं)
  • लिखें के रूप में फ्लैट पाठ या एक्सएमएल
  • लॉग फ़ाइल नाम प्रारूप विनिर्देश
  • तारीख
  • जनक एप्लिकेशन के नाम
  • आदि, आदि, आदि ...

मैं के साथ फ़ाइल नाम उपसर्ग करना है या नहीं डीएलएल असेंबली के लिए कॉन्फ़िगरेशन के संबंध में कुछ अन्य स्टैक ओवरफ्लो प्रश्न पढ़ चुके हैं और यह होस्टिंग असेंबली/ऐप के लिए app.config के बीच संघर्ष का कारण बनता है। मेरा मानना ​​है कि मेरी असेंबली सिर्फ एक कॉन्फ़िगरेशन फ़ाइल प्रदान करने का कारण है।

क्या यह उस अवसर के लिए एक अच्छा परिदृश्य है? क्या यह शायद मेरे प्रोजेक्ट में अपनी कॉन्फ़िगरेशन को सेंकना बेहतर विचार है ताकि मेरा लॉगर कॉन्फ़िगरेशन मान पुनर्प्राप्त करने के लिए एक्सएमएल फाइलों से पढ़ सके?

+2

मौजूदा लॉगिंग libs पर एक नज़र डालें, उदा। log4net aplog http://logging.apache.org/log4net/index.html - यह भी आसानी से बढ़ाया जा सकता है। हो सकता है कि यह पूरी तरह से नई लॉगिंग लाइब्रेरी लिखने लायक नहीं है। –

+0

@bja, सुझाव के लिए धन्यवाद। मैंने एक परियोजना के लिए लॉगिंग कोड का एक अच्छा सौदा लिखा है जो मैं काम पर काम कर रहा हूं और भविष्य के अनुप्रयोगों के लिए आधार के रूप में अधिकांश कोड का उपयोग करने का फैसला किया है। मैंने पहले लॉगिंग फ्रेमवर्क के साथ काम करने का प्रयास किया था और मेरा विभाग था क्योंकि निराश था। .NET 4.0 का उपयोग करना चाहता है और मुझे इसके साथ काम करने के लिए lib या दो प्राप्त करने में समस्याएं थीं। इसलिए मैंने अपना खुद का हल्का लॉगिंग लागू किया। हालांकि सुझाव के लिए बहुत बहुत धन्यवाद, मैं आमतौर पर उस विचार से सहमत हूं लेकिन यह मेरे अपने कोड का पुन: उपयोग करने का कोई कारण नहीं है। – jlafay

+0

@jlafay मैं उन्हें वैसे भी देख रहा हूं - उनके कोड का पुन: उपयोग नहीं करना - लेकिन यह देखने के लिए कि वे App.config फ़ाइल के माध्यम से कॉन्फ़िगर किए जाने को कैसे कार्यान्वित करते हैं - यह लॉगिंग फ्रेमवर्क को ऐप के माध्यम से कॉन्फ़िगर करने के लिए बहुत आम है। कॉन्फ़िगर फ़ाइल, और आप अपने स्वयं के ढांचे के साथ एक ही अभ्यास का पालन कर सकते हैं। :-) – BrainSlugs83

उत्तर

8

क्या तुम कर सकते हो

  • एक कस्टम विन्यास अनुभाग बनाएं (उदा उपयोग कर रहा हैCOnfiguration Section Designer उपकरण)

  • एक अलग MyAssembly.config फ़ाइल में

  • संदर्भ अपने विधानसभा के विन्यास डाल कि अपने मेजबान को एप्लिकेशन की config से विधानसभा कॉन्फ़िग फ़ाइल:

    <configuration> 
        <configSections> 
         <section name="YourAssembly" 
           type="YourAssembly.ConfigSection, YourAssembly" /> 
        </configSections> 
    
        <YourAssembly configSource="MyAssembly.config" /> 
    </configuration> 
    

इस तरह से, आप कर सकते हैं " बाहरी रूप से "अपनी कॉन्फ़िगरेशन को एक अलग कॉन्फ़िगरेशन फ़ाइल में विभाजित करें जिसमें आपके पास केवल एक बार (आपकी असेंबली प्रोजेक्ट में) है, और किसी भी प्रोजेक्ट को इसकी आवश्यकता है, बस अपनी सेटिंग्स को अपनी कॉन्फ़िगरेशन फ़ाइल में चाहिए।

+0

+1। मैं मैन्युअल रूप से कॉन्फ़िगरेशनसेक्शन और कॉन्फ़िगरेशनसेक्शन समूह कक्षाओं को वर्षों से लिख रहा हूं। यह उपकरण एक lifesaver की तरह दिखता है! – Toby

+0

मुझे लगता है कि यह मेरी कॉन्फ़िगरेशन आवश्यकताओं के लिए सबसे अच्छा समाधान है। कॉन्फ़िगरेशन सेक्शन डिज़ाइनर के लिंक के लिए भी धन्यवाद! – jlafay

3

एक कस्टम कॉन्फ़िगरेशन अनुभाग की तरह लगता है आपके मामले में अच्छी तरह से काम करेगा। एंटरप्राइज़ लाइब्रेरी जैसे कई पुस्तकालय वास्तव में ऐसा करते हैं। एक बनाने के बारे में MSDN article देखें।

3

.NET कॉन्फ़िगरेशन तंत्र DLLs के लिए कॉन्फ़िगरेशन फ़ाइलों को संभालने के लिए नहीं है। आपको अपने आवेदन को उचित सेटिंग्स के साथ कॉन्फ़िगर करना चाहिए और उन्हें उस कक्षा में भेजना चाहिए जिसे आप डीएलएल से तत्काल कर रहे हैं।


डीएलएल प्रोजेक्ट में सेटिंग्स जोड़ना संभव है क्योंकि आप आमतौर पर एप्लिकेशन के लिए करते हैं। आपको बस इतना करना है कि प्रासंगिक अनुभागों और प्रविष्टियों को एप्लिकेशन के app.config में मैन्युअल रूप से कॉपी करें और यह काम करेगा।

हालांकि, यह अभी भी सच है कि DLL की कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि बनाने की कोई बात नहीं है। यह पढ़ा नहीं जाएगा।

+1

चूंकि मैं इसे सॉफ़्टवेयर अनुप्रयोगों की एक विस्तृत श्रृंखला के लिए उपयोग करूँगा, इसलिए यह कॉन्फ़िगरेशन फ़ाइल के साथ फ्लाई पर कॉन्फ़िगर करना बेहतर नहीं होगा, मैं लॉग इन करने के बजाय त्वरित रूप से संपादित कर सकता हूं, जबकि लॉगर में तत्काल लॉग इन करना मेजबान ऐप? – jlafay

+0

@jlafay - नहीं, तो आप अपने डीएलएल में एक छिपी निर्भरता जोड़ रहे हैं। आप अभी भी एक कॉन्फ़िगरेशन फ़ाइल बना सकते हैं - बस अपने * एप्लिकेशन * को कॉन्फ़िगरेशन फ़ाइल (या उस फ़ाइल का एक भाग जिसे आप अपनी कॉन्फ़िगरेशन में कॉपी करते हैं) को पढ़ें और सेटिंग्स को अपने डीएलएल से कक्षाओं में पास करें। (और +1।) –

+0

एर ..., बहुत से डीएलएस को .config फ़ाइल में परिवर्तन की आवश्यकता होती है (विशेष रूप से फ्रेमवर्क डीएलएस लॉगिंग)। आप बस अपने app.config पर प्रासंगिक कॉन्फ़िगरेशन अनुभाग जोड़ते हैं, और यह सब अतिरिक्त कोड परिवर्तनों के बिना काम करता है। लिंक के लिए – BrainSlugs83

2

एक और तंत्र आपकी असेंबली के लिए एक अलग कॉन्फ़िगरेशन फ़ाइल (* .dll.config) होना है। तकनीक यहां दिखाया गया है: http://blog.rodhowarth.com/2009/07/how-to-use-appconfig-file-in-dll-plugin.html

उपरोक्त, असेंबली के लिए मानक app.config तकनीक का अनुकरण करें।

मेरी राय में डीएल कॉन्फ़िगरेशन रीडिंग कोड केवल संबंधित डीएल में और एक अलग वर्ग में मौजूद होना चाहिए - * .dll.config से कॉन्फ़िगरेशन प्रविष्टियों को पढ़ने की एक ज़िम्मेदारी के साथ। एक निष्पादन योग्य फ़ाइल कॉन्फ़िगरेशन फ़ाइल (app.config) के समान तरीके से एक असेंबली के लिए कॉन्फ़िगरेशन फ़ाइल रखने का यह एक अच्छा तरीका है।

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