2013-02-26 26 views
11

लॉग इन नहीं करता है निम्न कॉन्फ़िगरेशन के साथ कुछ भी नहीं होता है।EventLogAppender के साथ log4net

App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <log4net> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Form1.cs (उदाहरण)

public partial class Form1 : Form 
{ 
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

    public Form1() 
    { 
     InitializeComponent(); 

     log.Fatal("Test!"); 
    } 
} 
+0

स्टूडियो का कौन सा संस्करण? –

+0

विजुअल स्टूडियो 2012 + विंडोज 8. – timmkrause

उत्तर

13

आप जड़ विन्यास याद आ रही है ताकि आप की तरह

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> 
    </startup> 
    <log4net debug="true"> 
     <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <applicationName value="MyApp" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 


     <root> 
     <level value="All" /> 
     <appender-ref ref="EventLogAppender" /> 
     </root> 


    </log4net> 
</configuration> 

भी ध्यान रखें कि यदि आपके प्रोग्राम app.exe कहा जाता है, तो आप एक eventlog स्रोत app.exe कहा जाता है की जरूरत है कुछ की जरूरत है। यदि यह अस्तित्व में नहीं है, तो Log4net इसे बनाने का प्रयास करेगा, लेकिन इसके लिए व्यवस्थापक अधिकारों की आवश्यकता है, इसलिए आपको इस ईवेंट स्रोत को बनाने के लिए कम से कम एक बार व्यवस्थापक के रूप में अपना प्रोग्राम चलाने की आवश्यकता हो सकती है। इससे बचने के लिए, ईवेंट स्रोत सामान्य रूप से स्थापना प्रक्रिया के हिस्से के रूप में बनाया जाएगा जो पहले से ही व्यवस्थापक के रूप में चल रहा होगा।

+0

कोड की सहकर्मी रेखा के साथ संयोजन में अंत में काम किया। धन्यवाद! :) एक आखिरी दोष है: लॉग प्रविष्टियां केवल तब दिखाई देती हैं जब मैं .exe फ़ाइल स्वयं शुरू करता हूं लेकिन जब मैं f5 दबाता हूं। उस आखिरी पर कोई विचार? – timmkrause

+0

क्या आपके पास विजुअल स्टूडियो आउटपुट विंडो में कोई त्रुटि संदेश है? उपरोक्त कॉन्फ़िगरेशन के डीबग = "सत्य" खंड में आपको जानकारी दी जानी चाहिए कि log4net क्या कर रहा है और इसमें विफल होने पर त्रुटि संदेशों को शामिल करना चाहिए। (जब आप अपना लॉगिंग काम करते हैं तो शायद आप डिबग मोड को अक्षम करना चाहते हैं) – sgmoore

+0

"लॉग 4नेट: त्रुटि [EventLogAppender] त्रुटि कोड: जेनेरिक विफलता। एक सुरक्षा अपवाद को EventLog तक पहुंचने का प्रयास कर रहा है। संभवतः इवेंट स्रोत Log4NetEventViewer.vshost.exe मौजूद नहीं है और एक स्थानीय प्रशासक द्वारा बनाया जाना चाहिए। " - मैंने इवेंट स्रोत बनाने के लिए व्यवस्थापक के रूप में .exe शुरू किया लेकिन वीएस या vshost संस्करण नहीं। व्यवस्थापक के रूप में .vshost.exe को चलाना भी पर्याप्त नहीं था, क्योंकि उसने "-clr2" प्रत्यय या कुछ के साथ .exe प्रारंभ किया था। व्यवस्थापक के रूप में वीएस चलाना एक बार हल हो गया। धन्यवाद! – timmkrause

5

आप जोड़ना चाहिए:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

आपके प्रोजेक्ट की AssemblyInfo.cs में । यह लॉगर शुरू करेगा। और log4net को log4net.config नामक फ़ाइल में डालें।

+0

मैंने पहले से ही कोशिश की और फिर इसे फिर से हटा दिया क्योंकि इसका कोई प्रभाव नहीं पड़ा। – timmkrause

+0

क्षमा करें, आप सही थे। Sgmoore द्वारा प्रदान किए गए तत्व को जोड़ने के बाद भी यह काम नहीं किया लेकिन मैंने AssemblyInfo.cs में अपनी लाइन जोड़ने के बाद यह काम किया। – timmkrause

0

है कि आप करने के लिए अपने उपयोगकर्ता के लिए लिखने की अनुमति दे दी है सुनिश्चित करें:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ सेवाएं \ EventLog \ MyApp

और आप अधिक logers जोड़ना चाहते हैं तो इस नामकरण का पालन करना:

<root name="EventLog"> 
<level value="ALL"/> 
<appender-ref ref="FirstLog"/> 
</root> 

<logger name="FileLogger" additivity="false"> 
<level value="ALL" /> 
<appender-ref ref="Secong_Log" /> 
</logger> 

शुभकामनाएँ।