2013-05-30 11 views
7

मैं हाल ही में एक उपयोगकर्ता को log4net धन्यवाद के पार आया। वैसे भी, मैं प्रत्येक कंसोल लॉग इन करना चाहता हूं। राइट() और Debug.Write() स्वचालित रूप से एक लॉग फ़ाइल में कॉन्फ़िगर किया गया है जिसे मैंने कॉन्फ़िगर किया है। साथ ही, मैं कई कक्षा पुस्तकालयों का उपयोग करता हूं जिनमें कंसोल/डीबग स्टेटमेंट भी हैं जो log4net के बारे में कुछ भी नहीं जानते हैं। क्या कॉन्फ़िगरेशन के आधार पर स्वचालित रूप से लॉग फ़ाइल में भी लॉग इन किया जा सकता है? क्या यह संभव है?log4net लॉगिंग डीबग। राइटलाइन और कंसोल। राइटलाइन

क्या मैं रोलिंग लॉग फ़ाइल में लॉग इन करना चाहते हैं: (

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="SubToolsPortServerTest.log"/> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="1MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="ALL" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

उत्तर

7

आप Debug.WriteLine अनुप्रेषित कर सकते हैं डिबग में:

Console.WriteLine("console statement"); 
Debug.WriteLine("debug statement"); 

का दृष्टांत लॉगर:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
private static void InitializeLogger() 
{ 
    XmlConfigurator.Configure(); 
} 

पूरे app.config बनाता है) और Trace.WriteLine एक कस्टमलिखकर log4net पर 210 जो log4net पर लॉग इन करता है। एक साधारण कार्यान्वयन की मुख्य बिट्स कुछ ऐसी दिखाई देगी:

public class Log4NetTraceListener : TraceListener 
{ 
    ILog _logger = ...; 

    public override void WriteLine(string message) 
    { 
     _logger.Info(message); 
    } 
} 

फिर आप की तरह अपने आवेदन विन्यास फाइल कुछ में यह कॉन्फ़िगर करेंगे:

<system.diagnostics> 
    ... 
    <listeners> 
     <add name="traceListener" type="MyNamespace.Log4NetTraceListener,MyAssembly" /> 
    </listeners> 
    ... 
</system.diagnostics> 

एक और पूरा कार्यान्वयन लकड़हारा नाम के विन्यास का समर्थन कर सकते हैं , उपयोग करने के लिए लॉगिंग स्तर, और शायद संदेशों के कुछ आंतरिक बफरिंग।

Console.WriteLine के लिए आप Console.SetOut फोन करके अपने स्वयं के कस्टम TextWriter को अनुप्रेषित सकता है, और अपने कस्टम TextWriter log4net के लिए लॉग इन करें सकता है।

+0

जो, मैं आपका जवाब स्वीकार कर रहा हूं क्योंकि यह डीबग और कंसोल आउटपुट के बारे में मेरे प्रश्न का उत्तर देता है। Log4net पर लिखने के लिए। हालांकि, मुझे प्रत्येक प्रोजेक्ट में लॉग 4नेट जोड़ना और डीबग कथन बदलना आसान लगता है। धन्यवाद। – JMooney

+0

कोई भी ऐसा करने वाले डेडलॉक्स का अनुभव करता है? – dmarlow

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