कई फ़ाइलों को लिखने के लिए Log4net कॉन्फ़िगर करें


130

मैं एक ही प्रक्रिया से लॉग 2 अलग लॉग फ़ाइलों को लिखना चाहता हूं।

क्या यह संभव है कि log4net का उपयोग करना संभव है?

मुझे प्रत्येक लॉग फ़ाइल में अलग संदेश लिखने की आवश्यकता होगी। मैं एक विशिष्ट परिशिष्ट के लिए एक संदेश कैसे लिख सकता हूं?


3
आप अलग-अलग ऐपेंडर्स के लिए लॉग इन नहीं कर सकते हैं - आपको अलग-अलग लॉगर्स को कॉन्फ़िगर करने की आवश्यकता है, और प्रत्येक एक के लिए उपयुक्त ऐपेंडर संलग्न करें। फिर अलग लॉगर्स के लिए अलग-अलग मैसेज लॉग करें।
विनय साजिप

यहाँ मैंने इसे कोड-
Jay Sullivan

जवाबों:


82

हां, बस अपने लकड़हारे के लिए कई फाइलएपेंडर जोड़ें। उदाहरण के लिए:

<log4net>
    <appender name="File1Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-1.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>
    <appender name="File2Appender" type="log4net.Appender.FileAppender">
        <file value="log-file-2.txt" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="File1Appender" />
        <appender-ref ref="File2Appender" />
    </root>
</log4net>

5
अच्छा .. :) हालाँकि, मुझे प्रत्येक लॉग फ़ाइल में अलग संदेश लिखने की आवश्यकता होगी। मैं एक विशिष्ट परिशिष्ट के लिए एक संदेश कैसे लिख सकता हूं? धन्यवाद। ofer
ofer

2
@ ofer- ऐसा करने के बारे में मेरा जवाब देखें।
रिचर्ड सिप 3'09

1
यदि आप चाहते हैं कि File1Appender ERBOR त्रुटियों को लॉग करने के लिए DEBUG त्रुटियों और File2Appender को लॉग करे?
जोंसस्टैथम

मैं समान सामान हासिल करने की कोशिश कर रहा हूं। ख़ुशी होगी अगर आप मेरे सवाल का जवाब दे सकते हैं: stackoverflow.com/questions/24886364/…
आशीष चरण

202

ये उत्तर मददगार थे, लेकिन मैं अपना उत्तर दोनों app.config भाग और c # कोड भाग के साथ साझा करना चाहता था, इसलिए अगले व्यक्ति के लिए कम अनुमान है।

<log4net>
  <appender name="SomeName" type="log4net.Appender.RollingFileAppender">
    <file value="c:/Console.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
  </appender>
  <appender name="Summary" type="log4net.Appender.FileAppender">
    <file value="SummaryFile.log" />
    <appendToFile value="true" />
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="SomeName" />
  </root>
  <logger additivity="false" name="Summary">
    <level value="DEBUG"/>
    <appender-ref ref="Summary" />
  </logger>
</log4net>

फिर कोड में:

ILog Log = LogManager.GetLogger("SomeName");
ILog SummaryLog = LogManager.GetLogger("Summary");
Log.DebugFormat("Processing");
SummaryLog.DebugFormat("Processing2"));

यहाँ c: /Console.txt में "प्रसंस्करण" होगा ... और \ "समसामयिकी" में "प्रसंस्करण 2" होगा।


58
मैं सिर्फ लकड़हारे पर ध्यान देना चाहता था = लकड़हारे पर "झूठा" विशेषता जो सब कुछ को रूट से लॉग इन करने से रोकता है।
जेसन हर्नानडेज

1
यह log4net की शक्ति का एक बड़ा उदाहरण है। धन्यवाद!
क्रश करें

5
ऊपर कॉन्फ़िगरेशन गायब है <layout> ... </layout>, इसके बिना मुझे लॉग फ़ाइल में कोई संदेश नहीं दिखाई दिया।
क्रैनाटेना

@CrnaStena क्या आप सुनिश्चित हैं कि आपके द्वारा किया गया एकमात्र परिवर्तन है?
गैरी

1
@ क्रेग का उपयोग करने के बारे में अधिक जानने के लिए यह प्रश्न देखें: stackoverflow.com/questions/1999382/…
गैरी

60

विनय सही है। उनके जवाब में आपकी टिप्पणी के जवाब में, एक तरीका यह है कि आप इसे कर सकते हैं:

<root>
    <level value="ALL" />
    <appender-ref ref="File1Appender" />
</root>
<logger name="SomeName">
    <level value="ALL" />
    <appender-ref ref="File1Appender2" />
</logger>

ऐसा मैंने पूर्व में भी किया है। तो दूसरे लॉग के लिए कुछ इस तरह:

private static readonly ILog otherLog = LogManager.GetLogger("SomeName");

और आप अपना सामान्य लकड़हारा इस प्रकार प्राप्त कर सकते हैं:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

यह कैसे काम करता है यह समझने के लिए दस्तावेज़ के लकड़हारे और परिशिष्ट अनुभाग पढ़ें ।


3
मेरे पास मेरे एक ऐप में यही सेटअप है और यह मेरे लिए काम नहीं करता है :(
रोमन

1
यह चर्चा बहुत पुरानी है ... आशा है कि आप उत्तर दे सकते हैं ... मैंने आपके दृष्टिकोण की कोशिश की लेकिन दो लोग एक ही संदेश लॉग करते हैं। जैसे log.Info ("" ") और otherLog.Info (" ") दोनों लॉग फाइल को एक साथ संदेश लिखते हैं।
सुथारमोनील

1
@daniel_aren हाँ, मैंने क्या किया था कि मैंने अलग-अलग फ़ाइल पथों के साथ दो एपेंडरों को बनाने के लिए ऐपेंडर ब्लॉक का उपयोग किया था (ठीक एक के ऊपर एक जैसा) .... इसलिए प्रभावी रूप से हमारे पास नामों के साथ दो ऐपेंडर ब्लॉक हैं: fileappender1 और fileappender2 ... ।
सुथारमोनील

1
@SutharMonil बस लकड़हारे नोड के लिए 'additivity = "false" जोड़ते हैं, जैसा कि गैरी द्वारा जवाब दिया गया है और जेसन हर्नानडेज़ द्वारा हाइलाइट किया गया है। इस स्थिति में यह अभी भी सभी संदेशों को जड़ में डालेगा, लेकिन अन्य संदेशों में से केवल अन्य संदेश। Info ("") File1Appender2 में दिखाई देगा
स्वतंत्रता-एम

अब तक का सबसे सटीक जवाब।
फैब्रिकियो

41

मैं सभी संदेशों को रूट लकड़हारे को लॉग करना चाहता था, और त्रुटियों के साथ एक अलग लॉग रखना चाहता हूं, यहां बताया गया है कि यह कैसे किया जा सकता है:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="allMessages.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
    </appender>

    <appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender">
        <file value="errorsLog.log" />
        <appendToFile value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date  %-5level %logger  - %message%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="FATAL" />
        </filter>
    </appender>

    <root>
        <level value="ALL" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="ErrorsFileAppender" />
    </root>
</log4net>

फ़िल्टर तत्व के उपयोग पर ध्यान दें।


0

लॉग को दो या अधिक फ़ाइलों में कॉन्फ़िगर करने के लिए नीचे XML कॉन्फ़िगरेशन का उपयोग करें,

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">           
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
     <appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
      <file value="logs\log1.txt" />         
      <appendToFile value="true" /> 
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">        
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="All" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
     <logger additivity="false" name="RollingLogFileAppender2">
    <level value="All"/>
    <appender-ref ref="RollingLogFileAppender2" />
    </logger>
  </log4net>

XML कॉन्फ़िगरेशन के ऊपर दो अलग-अलग फ़ाइलों में लॉग होता है।

प्रोग्रामर का विशिष्ट उदाहरण प्राप्त करने के लिए,

ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2");

आप दो या अधिक ऐपेंडर तत्वों को log4net रूट एलिमेंट के अंदर कई गुना फाइलों में लॉग इन कर सकते हैं।

XML कॉन्फ़िगरेशन संरचना के बारे में अधिक जानकारी या आपके आवेदन के लिए कौन सा परिशिष्ट सबसे अच्छा है, नीचे दिए गए लिंक से विस्तार से पढ़ें,

https://log.apache.org/log4net/release/manual/configuration.html https://log.apache.org/log4net/release/sdk/index.html

आशा है कि यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.