मैं एक एएसपीएक्स पेज पर लॉग4नेट का उपयोग कर रहा हूं - मेरा मतलब है कि इस पेज में वेब.कॉन्फिग नहीं है और यह डिफ़ॉल्ट मशीन.कॉन्फिग सेटिंग्स पर निर्भर करता है। मैं डेटाबेस लॉगिंग का उपयोग करने की कोशिश कर रहा हूं लेकिन कुछ भी लॉग नहीं हो रहा है। जब मैं कोड के माध्यम से डीबग करता हूं तो मुझे कोई अपवाद नहीं दिखता है। मैंने इसे विनफॉर्म ऐप के साथ भी आजमाया लेकिन यह अभी भी काम नहीं कर रहा है। कोई भी संकेतक प्रशंसनीय होंगे!

यहाँ मेरा कोड और कॉन्फ़िग फ़ाइल है:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net debug="true">   
    <root>
        <level value="ALL" />
        <appender-ref ref="ADONetAppender" />
    </root>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
        <bufferSize value="100" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="XXX/>
        <commandText value="INSERT INTO [tblLogs] ([timeoccurred],[calltype],[severity],[message]) VALUES (@timeoccurred, @calltype, @severity, @message)" />

        <parameter>
            <parameterName value="@timeoccurred"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.RawTimeStampLayout"/>
        </parameter>

        <parameter>
            <parameterName value="@calltype"/>
            <dbType value="String"/>
            <size value="20"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%calltype"/>
            </layout>
        </parameter>

        <parameter>
            <parameterName value="@severity"/>
            <dbType value="String"/>
            <size value="50"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level"/>
            </layout>
        </parameter>

        <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message"/>
            </layout>
        </parameter>

    </appender>
</log4net>

कोड यहाँ है:

log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("Log4Net.Config")));
log4net.MDC.Set("calltype", callType);

log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
1
sajoshi 19 अप्रैल 2011, 14:28
बस पुष्टि करने के लिए, क्या वह कॉन्फिगरेशन है जिसे आपने Log4Net.Config फाइल के अंदर चिपकाया है? यदि हाँ, तो आपको जाँच करनी चाहिए कि क्या यह मौजूद है (क्योंकि log4net शिकायत नहीं करेगा)
 – 
wal
19 अप्रैल 2011, 14:34
क्या आपने यह सुनिश्चित करने के लिए रोलिंग फ़ाइल एपेंडर की कोशिश की है कि log4net सही तरीके से कॉन्फ़िगर किया जा रहा है। इसे रोलिंग फ़ाइल एपेंडर के साथ काम करें, फिर डीबी कॉन्फ़िगरेशन आज़माएं।
 – 
BenCr
19 अप्रैल 2011, 14:45
फिर एसक्यूएल प्रोफाइलर को यह देखने के लिए आज़माएं कि वह किस एसक्यूएल को निष्पादित करने का प्रयास कर रहा है। SQL सर्वर लॉग की जाँच करें।
 – 
BenCr
19 अप्रैल 2011, 14:46

3 जवाब

सबसे बढ़िया उत्तर

एक स्टैंडअलोन कॉन्फ़िगरेशन फ़ाइल को configSections नोड की आवश्यकता नहीं होती है:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
   ...
</log4net>

कुछ अतिरिक्त सलाह: थ्रेड प्रसंग का उपयोग करें एमडीसी के बजाय जो पदावनत है और अपने लॉगर्स को निम्नानुसार प्राप्त करने पर विचार करें:

log = log4net.LogManager.GetLogger(typeof(YourClass));
1
Stefan Egli 19 अप्रैल 2011, 14:31
बफ़रसाइज़ को 1 पर सेट करें, यह काफी संभावना है कि संदेश बफ़र किए गए हों लेकिन आपके परीक्षणों में डेटाबेस पर कभी नहीं लिखे गए हों
 – 
Stefan Egli
19 अप्रैल 2011, 14:37
अगर यह अभी भी काम नहीं कर रहा है: आंतरिक डिबगिंग चालू करें: haacked.com/archive/ 2006/09/27/Log4Net_Troubleshooting.aspx
 – 
Stefan Egli
19 अप्रैल 2011, 14:39

मुझे यह काम मिल गया। मुद्दा अंतिम पैरामीटर के साथ था - डीबी में उस कॉलम के लिए डेटाटाइप 'टेक्स्ट' है और जब मैंने ट्रेस सक्षम किया तो मुझे अपवाद मिल रहा था:

log4net:ERROR [AdoNetAppender] डेटाबेस कमांड तैयार नहीं कर सका [INSERT INTO [tblLogs] ([timeoccurred],[calltype],[severity],[message]) VALUES (@timeoccurred, @calltype, @severity, @message)] सिस्टम .InvalidOperationException: SqlCommand.Prepare विधि के लिए स्पष्ट रूप से सेट गैर-शून्य आकार के लिए सभी परिवर्तनीय लंबाई पैरामीटर की आवश्यकता होती है।

अंत में मैंने पैरामीटर परिभाषा बदल दी और आकार को स्पष्ट रूप से प्रदान किया और यह काम किया ..

<parameter>
    <parameterName value="@message"/>
    <dbType value="String"/>
    <size value="1024"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message"/>
    </layout>
</parameter>

आपके पॉइंटर्स के लिए धन्यवाद चैंप्स ...

1
Philipp M 8 नवम्बर 2013, 13:39

क्या आपने कनेक्शन स्ट्रिंग बदल दी है? :)

<connectionString value="XXX/>

यदि कनेक्शन स्ट्रिंग में समस्या नहीं है तो log4net.Config.XmlConfigurator.Configure पर कॉल करने के बाद ब्रेकपॉइंट लगाएं और इस चर का निरीक्षण करें

var loggers = log4net.LogManager.GetCurrentLoggers();

और अपने लॉगर्स की जांच करें एपेंडर एक ADONetAppender है। यदि नहीं, तो इसका मतलब है कि पिछली कॉल (कॉन्फ़िगर करें) को आपकी कॉन्फ़िग फ़ाइल नहीं मिली है।

0
wal 19 अप्रैल 2011, 14:49