2013-04-29 19 views
5

मैं अपने .NET ऐप में लॉगिंग लागू करने के लिए log4net का उपयोग करता हूं। हालांकि मैं प्रत्येक उपयोगकर्ता के लिए 300kb log4net.dll वितरित नहीं करना चाहता हूं, लेकिन अगर उसे समस्या है तो मैं इस डीएल को उपयोगकर्ता को भेज दूंगा और मैं चाहता हूं कि वह लॉग प्रदान करे।मैं log4net.dll वैकल्पिक कैसे बना सकता हूं?

तो, क्या मेरे ऐप को चलाने के लिए संभव है कि डीएल वहां है या नहीं? डीएल लॉगिंग के लिए निश्चित रूप से आवश्यकता होगी, लेकिन यदि कोई लॉगिंग की आवश्यकता नहीं है, तो ऐप को डीएल के बिना चलाना चाहिए।

+0

यह एक प्लगइन बनाओ:

अब आप अपने लकड़हारा बनाने के लिए और लॉग को संदेश "लिखने" अपने कारखाने का उपयोग कर सकते हैं। [एमईएफ] देखें (http://mef.codeplex.com/)। – Oded

+2

300kb? यह कुछ नहीं है, इसे जहाज। –

+0

@SteveWellens कुछ भी नहीं? Exe सिर्फ 15kb है और स्थापित करने की आवश्यकता नहीं है। –

उत्तर

4

हां, यह संभव है।

सबसे पहले अपने सभी लॉग तरीकों के साथ एक interfase बनाएँ:

public interface ILogger 
{ 
    void Write(string message); 
    // And much more methods. 
} 

अब दो उदाहरण बना, एक डमी उदाहरण (यह DummyLogger फोन की सुविधा देता है), और (Log4NetLogger) एक उदाहरण है, जिसमें log4net इसके संदेश भेज देंगे।

खत्म करने के लिए, एक कारखाने वर्ग बनाने के लिए:

static public class LogFactory 
{ 
    static public ILogger CreateLogger() 
    { 
      if (/*Check if Log4Net is available*/) 
       return new Log4NetLogger(); 
      else 
       return new DummyLogger(); 
    } 
} 

अगर log4net अगर फाइल अपने बिन-फ़ोल्डर में है बस की जाँच करके उपलब्ध है आप जांच कर सकता है। कुछ ऐसा:

File.Exists(AppDomain.CurrentDomain.BaseDirectory + "Log4Net.dll") 

लेकिन मैं कल्पना कर सकता हूं कि आप अन्य चेक करना चाहते हैं, जैसे कि यह जीएसी या जो भी हो, में मौजूद है।

ILogger logger = LoggerFactory.CreateLogger(); 
logger.Write("I am logging something!"); 
+0

इस काम के लिए आपको आवश्यकता होगी log4net लाइब्रेरी को गतिशील रूप से लोड करने और प्रतिबिंब के माध्यम से 'Log4NetLogger' ऑब्जेक्ट का निर्माण करने के लिए। यदि नहीं, तो मुख्य एप्लिकेशन में log4net.dll का एक स्थिर संदर्भ होगा और यह मौजूद नहीं होने पर इनकार करने से इंकार कर देगा। – MartinStettner

+0

@ मार्टिनस्टेटनर: मैंने अभी इसका परीक्षण किया है। मेरा समाधान काम करता है। जैसे ही आप एक विधि को कॉल करते हैं, एक स्थिर संदर्भ विफल हो जाएगा जिसमें अनुपलब्ध असेंबली से ऑब्जेक्ट्स (जरूरी कॉल/उपयोग नहीं) वस्तुएं होंगी। मेरे मामले में स्थिर संदर्भ विफल हो जाएगा यदि Log4NetLogger के सदस्यों में से एक को बुलाया जाता है, जो नहीं होगा। –

+0

आप अपने लॉगिंग को कैसे कॉन्फ़िगर करते हैं? – sgmoore

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