2008-09-25 10 views
9

मैं एक एकल पिरोया आवेदन जो रनटाइम के दौरान कई विधानसभाओं लोड करता है का उपयोग कर निम्न:रनटाइम पर लोड असेंबली में मैं सामान्य लॉग 4नेट संदर्भ का उपयोग कैसे करूं?

objDLL = Assembly.LoadFrom(strDLLs[i]); 

मैं करूंगा विधानसभाओं इस तरह से भरी हुई विधानसभाओं के बाकी के रूप में ही log4net.ILog संदर्भ का उपयोग करना चाहते कर । लेकिन ऐसा लगता है कि रनटाइम लोड असेंबली के पास एक अलग संदर्भ है और उन्हें अपनी कॉन्फ़िगरेशन की आवश्यकता है। क्या किसी को पता है कि एक .NET इंटरफ़ेस का उपयोग कर रनटाइम पर लोड किए गए असेंबली में एक एकल log4net.ILog का उपयोग किया जा सकता है?

यहाँ log4net.ILog निर्माण और कार्यक्रम कक्षा में समर्थन कोड है:

// Configure log4net using the .config file 
    [assembly: log4net.Config.XmlConfigurator(Watch = true)] 

    public static class Program 
    { 
     private static log4net.ILog m_Log = null; 

     [STAThread] 
     public static void Main(string[] args) 
     { 
     try 
     { 
      m_Log = log4net.LogManager.GetLogger(
       MethodBase.GetCurrentMethod().DeclaringType); 
     } 

     } 
    } 
+0

आपको एक ही आईएलओजी रखने के लिए उन सभी की आवश्यकता क्यों होगी? आपके पास प्रति कक्षा एक आईएलओजी हो सकती है, और वे सभी डिफ़ॉल्ट रूप से रूट लॉगर पर लॉग इन करते हैं। –

उत्तर

2

अपने सभी विधानसभाओं एक आम इंटरफ़ेस को लागू है, तो आप एक संपत्ति या निर्माता पैरामीटर आप पारित करने के लिए अनुमति देता है कि हो सकता है आपके गतिशील रूप से लोड असेंबली के लिए आईएलओजी का स्थानीय उदाहरण।

0

रनटाइम लोडेड क्लास के बारे में कुछ सामान्य प्रति आईएलओजी प्रति कक्षा काम करने से रोकता है। मैं एक वैध आईएलओजी उदाहरण प्राप्त कर सकता हूं, लेकिन अन्य सभी उदाहरणों के विपरीत यह कॉन्फ़िगर नहीं किया गया है (सभी ** ** सक्षम झंडे झूठे पर सेट हैं)। शायद "रूट" लॉगर रनटाइम पर लोड कक्षाओं के लिए सुलभ नहीं है ???

1

आप एक शाब्दिक लॉगर नाम स्ट्रिंग निर्दिष्ट करके एक ही लॉगर प्राप्त कर सकते हैं, इस प्रकार एक ही लॉगर इंस्टेंस प्राप्त कर सकते हैं।

log4net.LogManager.GetLogger("SomeLogger"); 
0

मैं एक बेवकूफ समाधान है। आप XmlConfiguration को मुख्य log4net कॉन्फ़िगरेशन फ़ाइल में सेट कर सकते हैं।

[assembly: log4net.Config.XmlConfigurator(ConfigFile="<configpath>",Watch = true)] 

यह वास्तव में सुंदरता नहीं है .. लेकिन यह चलता है।

1

यह उत्तर 4 साल देर से आता है, लेकिन मुझे अभी भी एक ही समस्या का सामना करना पड़ा। मेरे मामले में, मैंने पाया कि असेंबली जिसे लोड किया जा रहा था (कॉलिंग असेंबली की तुलना में एक अलग फ़ोल्डर से) भी लॉग 4नेट का अपना उदाहरण लोड कर रहा था।

मैंने लॉग 4 असेंबली लोड होने वाले फ़ोल्डर से log4net.dll फ़ाइल को हटाकर समस्या को ठीक किया।

+0

ओएमजी! इसने मेरी समस्या हल की जहां गतिशील रूप से लोड असेंबली में लॉगिंग कभी काम नहीं किया, जबकि परियोजना में संदर्भ में असेंबली जब यह ठीक काम कर रहा था। –

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