2009-08-03 11 views
9

मैं पैटर्न & प्रैक्टिस एंटरप्राइज़ लाइब्रेरी लॉगिंग एप्लिकेशन ब्लॉक को .NET में लिखे गए एप्लिकेशन के लिए लपेट रहा हूं।सिंगलटन लॉगर, स्थैतिक लॉगर, फैक्टरी लॉगर ... लॉग कैसे करें?

मैं एक लॉगर को उपclass करने में सक्षम होना चाहता हूं (यानी डोमेन विशिष्ट लॉगिंग प्रदान करने के लिए)।

ऐसा करने का सबसे अच्छा तरीका क्या है?

उदाहरण के लिए, मेरे पास इस समय एक स्थिर लॉगर क्लास है, लेकिन यह मुझे डोमेन विशिष्ट लॉगिंग के लिए विशेषज्ञता देने की अनुमति नहीं देता है।

उदाहरण के लिए

,

Log(MyDomainObj obj, string msg)

उत्तर

12

चेक बाहर NLog। वे पैटर्न की इस तरह का उपयोग करें:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

फिर आप वर्ग कि myDomainLogger के अंतर्गत आता है के आधार पर उत्पादन के विशेषज्ञ कर सकते हैं।

अधिक विस्तार:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

फिर अपने उत्पादन में आप इसे उत्पादन "MyDomain.SomeFunc" हो सकता है के भाग के रूप संदेश "यह एक परीक्षण है"।

5

इसके अलावा, चेकआउट log4net। मैंने कभी भी ईएल की लॉगिंग को लॉग 4नेट के रूप में लचीला नहीं पाया। मैंने log4net चुना क्योंकि मैं लॉग 4j का उपयोग करने से पहले ही परिचित था।

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

यह इस तरह से कर रहा, मैं इस तरह लॉग प्राप्त कर सकते:

2009-07-15 09: 48: 51,674 [4420] डीबग SampleNamespace.SampleClass [(शून्य)] - नमूना संदेश जिसे आप आउटपुट करना चाहते हैं

4

आप इससे भी बेहतर कर सकते हैं। एक रैपर वर्ग लिखें जो या तो Nlog या log4net या whatnot लपेटता है। फिर आप उस कोडर क्लास का उपयोग कर सकते हैं (यदि आप वास्तव में चीजों को डीक्यूपल करना चाहते हैं तो इसके लिए एक इंटरफ़ेस का उपयोग करें)। इस तरह, यदि आप लॉगर क्लास को बदलने का निर्णय लेते हैं, तो आपको केवल एक वर्ग को बदलना होगा और अपनी सभी कक्षाओं को संपादित नहीं करना होगा।

+2

एक डिजाइन बिंदु से इस तरह से जाने का रास्ता है। – Mantzas

+0

पहले से ही रैपर उपलब्ध हैं जैसे सामान्य.लॉगिंग। – Onur

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