a project नेट के लिए Common.Logging का उपयोग करता है, मैंने देखा कि कुछ वर्गों एक वर्ग स्थिर सदस्य के रूप में लकड़हारा उदाहरण घोषणा करते हैं। उदाहरण के लिए:सी # में मेरा सामान्य होना चाहिए। लॉगिंग लॉगर एक उदाहरण सदस्य या स्थैतिक होना चाहिए?
public class SimpleExample : IExample
{
public virtual void Run()
{
ILog log = LogManager.GetLogger(typeof (SimpleExample));
log.Info("------- Initializing ----------------------");
// etc
}
}
वहाँ एक दृष्टिकोण या अन्य पसंद करते हैं करने के लिए एक कारण है:
public class HelloJob : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HelloJob));
public HelloJob()
{
}
public virtual void Execute(IJobExecutionContext context)
{
_log.Info(string.Format("Hello World! - {0}", System.DateTime.Now.ToString("r")));
}
}
और अन्य वर्गों में लकड़हारा एक उदाहरण सदस्य के रूप में घोषित किया जाता है?
जो स्थितियों में प्रत्येक दृष्टिकोण की सिफारिश की है? क्या यह थ्रेड सुरक्षा से संबंधित है?
क्या यह एक समस्या होगी यदि मैंने अभी एक स्थिर "लॉगर" सदस्य के साथ "लॉगर" वर्ग घोषित किया है और पूरी परियोजना का उपयोग किया गया है (इस मुद्दे के अलावा कि मैं अभ्यास में एक वैश्विक चर है)?
'LogManager.GetLogger' शायद आंतरिक रूप से निर्भरता इंजेक्शन के माध्यम से कार्यान्वित किया गया है; अर्थात, निर्भरता लॉगर के भीतर प्रबंधित की जाती है। मैं नहीं चाहता कि मेरे लॉगर्स "प्रति-उदाहरण फ़ील्ड" के रूप में संग्रहीत हों और प्रत्येक इंस्टेंस के लिए उस ओवरहेड को प्राप्त करें। क्लासिक रूप से इसे संग्रहीत करना जब कक्षा पहली बार लोड हो जाती है मेरे लिए काम करता है। –
@ChrisSinclair: यह सच है कि तत्काल * विवरण * LogManager.GetLogger द्वारा संभाला जाता है, और मुझे लगता है कि Commons.Logging एक सामान्य लॉगिंग इंटरफ़ेस प्रदान करता है, जिससे आप अंतर्निहित ढांचे, कॉन्फ़िगरेशन इत्यादि को स्विच करने के लिए स्वतंत्र होते हैं। हालांकि, यह एक है कारखाना पैटर्न का उदाहरण, निर्भरता इंजेक्शन नहीं। कारखाना पैटर्न में मैन्युअल तत्कालता पर बहुत सारे फायदे हैं, लेकिन निर्भरता इंजेक्शन में अभी भी अतिरिक्त फायदे हैं। आपके डी फ्रेमवर्क को अभी भी प्रत्येक प्रकार के लिए एक लॉगर का पुन: उपयोग करने के लिए सेट किया जा सकता है, और ओवरहेड व्यावहारिक रूप से 90% समय का अतुलनीय है। – StriplingWarrior
आम। लॉगिंग दस्तावेज बताता है कि सार्वजनिक स्थैतिक LogManagers थ्रेड सुरक्षित हैं, लेकिन उदाहरण विधियां नहीं हैं, जो इस उत्तर का सामना करने लगती हैं। http://netcommon.sourceforge.net/docs/2.0.0/api/html/Common.Logging~Common.Logging.LogManager.html – coderjoe