मैंने डुप्लिकेट के लिए कड़ी मेहनत की है लेकिन इसे एक बार पूछना चाहिए, इससे कोई फर्क नहीं पड़ता कि यह एक बार और सभी के लिए स्पष्ट हो सकता है!log4net प्रारंभिकरण
एक ताजा कंसोल ऐप्लिकेशन में पर 64 बिट W7 VS28KSP1 पर log4net संस्करण 1.2.10.0 का उपयोग कर, मैं निम्नलिखित कोड: -
using log4net;
using log4net.Config;
namespace ConsoleApplication1
{
class Program
{
static readonly ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
_log.Info("Ran");
}
}
}
मेरी app.config
में, मेरे पास है:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Program.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%username] %date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
यह कुछ भी नहीं लिखता है, जब तक कि मैं या तो कोई विशेषता नहीं जोड़ता:
[ assembly:XmlConfigurator ]
या स्पष्ट रूप से मुख्य() में यह itialise:
_log.Info("This will not go to the log");
XmlConfigurator.Configure();
_log.Info("Ran");
यह निम्नलिखित प्रश्न उठाता है:
- मैं लगभग निश्चित है कि मैं इसे विधानसभा विशेषता के अलावा बिना log4net के कुछ संस्करण पर कहीं काम कर देखा है हूँ या मुख्य में कॉल करें। क्या कोई मुझे आश्वस्त कर सकता है कि मैं कल्पना नहीं कर रहा हूं?
- क्या कोई मुझे बता सकता है कि डॉक्टर में कहां स्पष्ट रूप से कहता है कि कॉन्फ़िगरेशन अनुभाग और प्रारंभिक हुक दोनों की आवश्यकता है - उम्मीद है कि यह कब बदला गया है, अगर यह बदल गया है?
मैं आसानी से कल्पना कर सकते हैं क्यों इस नीति हो सकती है - initialisation कदम आश्चर्य से बचने के लिए आदि स्पष्ट हो रही है, यह सिर्फ है कि मैं याद करने के लिए हमेशा बात यही नहीं जा रहा है ... (और सामान्य रूप से मेरे पास है लगते है जो आम तौर पर तस्वीर से बाहर configSections लेता है एक अलग फाइल में config,)
सभी ध्वनि काफी व्यावहारिक लगता है।फिर भी और अधिक खोज रहे हैं - मुझे विश्वास है कि मैंने एक स्पष्ट फ़ाइल को बिना किसी स्पष्ट XmlConfiguratorAttribute या XmlConfigurator.Configure कॉल के बिना लॉग फ़ाइल में उत्सर्जित किया है। यह उचित रूप से लगातार wrt 1.2.10 में काम नहीं कर रहा है, और प्रतिबिंबक के माध्यम से कोड यह सुझाव नहीं देता है कि यह मार्कर या स्पष्ट आमंत्रण के बिना काम करेगा। शायद मुझे इसके बजाय एनएलओजी का उपयोग करना चाहिए, और इनमें से कोई भी समस्या नहीं होगी: पी –
@ रूबेन - आप लॉग 4नेट को प्रारंभ करने के लिए क्यों एक अलग ढांचे पर स्विच करेंगे? –
@ पीटर लिलाववॉल्ड: मेरे पास ऐसा कोई इरादा नहीं है, यह सुनिश्चित नहीं है कि आपको यह विचार कहां मिला? मुझे यह समझने में दिलचस्पी है कि मैं कभी भी यह सोचने के लिए कैसे सोचता हूं कि इसे किसी भी प्रकार के स्पष्ट कॉन्फ़िगरेशन के बिना काम करने के लिए या कॉन्फ़िगरेटर को कॉल के माध्यम से काम करना संभव है। कॉन्फ़िगर करें ...? –