log4net पदानुक्रम और लॉगिंग स्तर


127

यह साइट कहती है

लकड़हारे को स्तर सौंपा जा सकता है। स्तर log4net.Core.Level वर्ग के उदाहरण हैं। प्राथमिकता बढ़ाने के क्रम में निम्नलिखित स्तरों को परिभाषित किया गया है :

  • सब
  • डीबग
  • जानकारी
  • चेतावनी
  • त्रुटि
  • घातक
  • बंद

DEBUG की प्राथमिकता सबसे कम है और ERROR अधिक है।

सवाल

  • अगर मैंने Min और Max का उदाहरण DEBUG और ERROR सेट किया है, तो यह DEBUG, INFO, WARN और ERROR को प्रिंट करता है। न्यूनतम और अधिकतम फिल्टर के उपयोग के बिना। यदि मैं ERROR (लॉगिंग स्तर = ERROR) निर्दिष्ट करता हूं, तो क्या इसमें DEBUG, INFO & WARN शामिल होंगे
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

मिनट और अधिकतम फिल्टर के बजाय। क्या किसी स्तर को कॉन्फ़िगर करना और लॉगिंग के लिए इसके नीचे के अन्य सभी स्तरों को शामिल करना संभव है।

उदाहरण - त्रुटि के रूप में सेट स्तर इसमें DEBUG, INFO, WARN और ERROR शामिल होंगे। क्या यह log4net के साथ संभव है?

किसी एक टिप्पणी के आधार पर log4net config पोस्ट करना:

     <?xml version="1.0" encoding="utf-8" ?>
     <configuration>
        <configSections>
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
        </configSections >
        <log4net debug="true">
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <layout type="log4net.Layout.XMLLayout" /> -->
        <param name="File" value="TestLog.log" />
        <param name="AppendToFile" value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <header type="log4net.Util.PatternString" value="[START LOG] %newline" />
            <footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
            <conversionPattern value="%d [%t] %-5p - %m%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="ERROR"/>
        </filter>
    </appender>
<root>
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </root>
    <logger name="log4NetExample">
        <!-- <appender-ref ref="B" /> -->
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
    </logger>
</log4net>


क्या आपने जानकारी के लिए लॉगिंग स्तर सेट करने की कोशिश की है और जाँच की है कि क्या इसमें INFO और DEBUG शामिल हैं?
डिफ़ॉल्ट

5
DEBUG में सबसे कम प्राथमिकता है और त्रुटि उच्चतम है।यह एक प्राथमिकता नहीं है , लेकिन संदेश के ऊपर या ऊपर एक सीमा लॉग इन होगी।
आर। श्रेयर्स

क्या आपने केवल उपयोग करने की कोशिश की है levelMax? मुझे लगता है कि अगर आप levelMin
AN

जवाबों:


90

यह समझने में मदद मिल सकती है कि लॉगर को किस स्तर पर दर्ज किया गया है जो कि स्तरों को सौंपा जा सकता है। स्तर log4net.Core.Level वर्ग के उदाहरण हैं। बढ़ती गंभीरता के क्रम में निम्नलिखित स्तरों को परिभाषित किया गया है - लॉग स्तर।

प्रत्येक सेटिंग स्तर के लिए दर्ज किए गए स्तरों की संख्या:

 ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
All                        
DEBUG  DEBUG                  
INFO   INFO   INFO               
WARN   WARN   WARN   WARN           
ERROR  ERROR  ERROR  ERROR  ERROR      
FATAL  FATAL  FATAL  FATAL  FATAL  FATAL  
OFF    OFF    OFF    OFF    OFF    OFF    OFF

2
क्षमा करें मुझे लगा कि यह wswg था, ऐसा क्यों नहीं है ??
मेल पम्मा

1
आप उत्तरों के उचित प्रारूपण के लिए साइट के इस भाग पर एक नज़र डाल सकते हैं
जारोड मोजर

36

अधिकांश अनुप्रयोगों के लिए आप एक न्यूनतम स्तर निर्धारित करना चाहते हैं लेकिन अधिकतम स्तर नहीं।

उदाहरण के लिए, जब आपका कोड डीबग करना DEBUG के लिए न्यूनतम स्तर निर्धारित करता है, और उत्पादन में इसे WARN पर सेट करता है।


कृपया मेरे अद्यतन प्रश्न की जाँच करें, मेरा प्रश्न स्तरों और लॉग स्टेटमेंट्स के लिए है
शिव

बदले <level value="ALL" /> में <level value="WARN" />हैं और आप केवल चेतावनी और त्रुटियों मिल जाएगा।
इल्या कोगन

2
नहीं, यह मदद नहीं करता है। मैंने बदलने की कोशिश की। मैंने नीचे प्राथमिकता के लिए लॉग नहीं देखे हैं
शिव

12
बेशक आप प्राथमिकता के नीचे लॉग नहीं देखेंगे। यह एक न्यूनतम प्राथमिकता है जिसे आप सेट कर रहे हैं।
इल्या कोगन

19

DEBUG सभी संदेश, जानकारी को DEBUG संदेशों के अलावा सभी को दिखाएगा, और इसी तरह।
आमतौर पर कोई व्यक्ति INFO या WARN का उपयोग करता है। यह कंपनी की नीति पर निर्भर करता है।


कृपया मेरे अद्यतन प्रश्न की जाँच करें, मेरा प्रश्न स्तरों और लॉग स्टेटमेंट्स के लिए है
शिव

कृपया अपना संपूर्ण लॉग 4 नेट कॉन्फिगर पोस्ट करें, आपके पास दो लॉगर हो सकते हैं जो हस्तक्षेप कर रहे हैं।
वीसमैट

और मैंने व्यक्तिगत रूप से अब तक केवल स्तर की सेटिंग का उपयोग किया है। मुझे लगता है कि यदि संभव हो तो न्यूनतम / अधिकतम सेटिंग्स से बचा जाना चाहिए।
वीसमैट

मैंने पूरे log4net कॉन्फिगर को पोस्ट किया है। कृपया जांचें। मैं सीखने और लागू करने की कोशिश कर रहा हूं।
शिव

16

यहाँ कुछ कोड सभी log4net स्तरों की प्राथमिकता के बारे में बता रहा है:

TraceLevel(Level.All); //-2147483648

TraceLevel(Level.Verbose);   //  10 000
TraceLevel(Level.Finest);    //  10 000
    
TraceLevel(Level.Trace);     //  20 000
TraceLevel(Level.Finer);     //  20 000
    
TraceLevel(Level.Debug);     //  30 000
TraceLevel(Level.Fine);      //  30 000
    
TraceLevel(Level.Info);      //  40 000
TraceLevel(Level.Notice);    //  50 000
    
TraceLevel(Level.Warn);      //  60 000
TraceLevel(Level.Error);     //  70 000
TraceLevel(Level.Severe);    //  80 000
TraceLevel(Level.Critical);  //  90 000
TraceLevel(Level.Alert);     // 100 000
TraceLevel(Level.Fatal);     // 110 000
TraceLevel(Level.Emergency); // 120 000
    
TraceLevel(Level.Off); //2147483647


private static void TraceLevel(log4net.Core.Level level)
{
   Debug.WriteLine("{0} = {1}", level, level.Value);
}


10

जैसा कि दूसरों ने उल्लेख किया है, आमतौर पर उस स्तर को लॉग करने के लिए न्यूनतम लॉगिंग स्तर निर्दिष्ट करना बेहतर होता है और कोई भी अन्य इससे अधिक गंभीर होता है। ऐसा लगता है जैसे आप सिर्फ लॉगिंग स्तरों के बारे में सोच रहे हैं।

हालाँकि, यदि आप अलग-अलग स्तरों पर लॉग-इन पर अधिक सूक्ष्म नियंत्रण चाहते हैं, तो आप log4net को निम्नलिखित सिंटैक्स का उपयोग करके केवल एक या अधिक विशिष्ट स्तरों को लॉग करने के लिए कह सकते हैं:

<filter type="log4net.Filter.LevelMatchFilter">
  <levelToMatch value="WARN"/>
</filter>

या फ़िल्टर में "इनकार" नोड जोड़कर एक विशिष्ट लॉगिंग स्तर को बाहर करने के लिए।

आप कई स्तरों को निर्दिष्ट करने के लिए एक साथ कई फ़िल्टर को स्टैक कर सकते हैं। उदाहरण के लिए, यदि आप केवल WARN और FATAL स्तर चाहते थे। यदि आप चाहते थे कि स्तर लगातार थे, तो LevelRangeFilter अधिक उपयुक्त है।

संदर्भ डॉक्टर: log4net.Filter.LevelMatchFilter

यदि अन्य उत्तरों ने आपको पर्याप्त जानकारी नहीं दी है, तो उम्मीद है कि यह आपको लॉग 4नेट से बाहर निकलने में मदद करेगा।


आह इनकार मैं क्या है, व्यक्तिगत रूप से, के लिए देख रहा था। जानकारी + त्रुटि संदेश चाहते हैं, लेकिन डीबग नहीं। इसके लिए धन्यवाद।
सरफराज

by adding a "deny" node to the filterकैसे?
म्हाराट्रोड

@mrhotroad मुझे यकीन नहीं है कि 2014 में log4net का वर्तमान संस्करण संस्करण से कितना अलग है, लेकिन यहाँ LevelMatchFilter.AcceptOnMatch पर डॉक्टर है। logging.apache.org/log4net/release/sdk/html/… तो आप कर सकते हैं <levelToMatch मान = "WARN" AcceptOnMatch = "false" />
ulty4life

8

इसका असली आधिकारिक दस्तावेज ( Apache log4net ™ मैनुअल - परिचय ) बताता है कि निम्न स्तर हैं ...

  • सब
  • डीबग
  • जानकारी
  • चेतावनी
  • त्रुटि
  • घातक
  • बंद

... लेकिन विचित्र रूप से जब मैं विधानसभा log4net.dll, v1.2.15.0 सीलबंद वर्ग log4net.Core.Level देखता हूं, तो मुझे निम्न स्तर परिभाषित दिखाई देते हैं ...

public static readonly Level Alert;
public static readonly Level All;
public static readonly Level Critical;
public static readonly Level Debug;
public static readonly Level Emergency;
public static readonly Level Error;
public static readonly Level Fatal;
public static readonly Level Fine;
public static readonly Level Finer;
public static readonly Level Finest;
public static readonly Level Info;
public static readonly Level Log4Net_Debug;
public static readonly Level Notice;
public static readonly Level Off;
public static readonly Level Severe;
public static readonly Level Trace;
public static readonly Level Verbose;
public static readonly Level Warn;

मैं लंबे समय से PostSharp OnBoundaryEntry और OnBoundaryExit के संयोजन में TRACE का उपयोग कर रहा हूं। मुझे आश्चर्य है कि ये अन्य स्तर प्रलेखन में क्यों नहीं हैं। इसके अलावा, इन सभी स्तरों की सही प्राथमिकता क्या है?


2
इसके लायक क्या है, वे सभी निम्नलिखित लिंक पर सूचीबद्ध हैं, लेकिन उन्होंने कुछ समय के लिए अपने मैनुअल को अपडेट नहीं किया है। logging.apache.org/log4net/release/sdk/html/…
डायनेडो

2
स्तर ठीक; स्तर महीन; स्तर बेहतरीन; मैं अभी से इन तीनों का उपयोग करने जा रहा हूं।
मेम्बे

-3

इस तरह की कोशिश करो, यह मेरे लिए काम किया

<root>
  <!--<level value="ALL" />-->
  <level value="ERROR" />
  <level value="INFO" />
  <level value="WARN" />     
</root>

यह 3 प्रकार की त्रुटियों को लॉग करता है - त्रुटि, सूचना और चेतावनी


7
रूट लकड़हारा के लिए log4net डॉक्स के अनुसार : "स्तर: वैकल्पिक तत्व, अधिकतम एक की अनुमति है । इस लकड़हारे के लिए लॉगिंग स्तर को परिभाषित करता है। यह लकड़हारा केवल उस घटना को स्वीकार करेगा जो इस स्तर पर या उससे ऊपर हैं। "
गोनाडल

इस जवाब ने वोट क्यों दिया? यह मेरे लिए भी काम कर रहा है। इसलिए मतदान हो रहा है।
अमिलामद

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