2010-05-14 11 views
5

मैं अपने log4net लकड़हारा के minLevel और FATAL और DEBUG को maxLevel क्रमशः सेट कहो, लेकिन कुछ परिदृश्य के अंतर्गत मैं WARN स्तर में लिखा लॉग-आइटम मूक, और अन्य सभी रखना चाहते हैं सीमा में स्तर सक्रिय।log4net के साथ एक सीमा के भीतर कई लॉग स्तरों को छोड़ने से

क्या minLevel और maxLevel का उपयोग करके किसी सीमा को निर्दिष्ट करने के बजाय लॉग-स्तर के 'अलग' स्तरों का उपयोग करना संभव है?

मुझे लगता है कि यह सरल होना चाहिए, लेकिन मुझे इस समस्या से निपटने वाले किसी भी log4net दस्तावेज़ या उदाहरण नहीं मिला है।

उत्तर

7

आप अपने एपेंडर पर LevelMatchFilter का उपयोग कर सकते हैं।

उदाहरण:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

यह उदाहरण केवल प्रिंट डीबग होगा; जानकारी और त्रुटि संदेश। अपनी आवश्यकताओं के अनुसार इसे अनुकूलित करना आसान है।

नोट: अंत में DenyAllFilter को न भूलें।

+0

हे! त्वरित उत्तर के लिए धन्यवाद। क्या यह प्रोग्रामेटिक रूप से किया जा सकता है? मुझे केवल लॉगर (रूट) लॉग-स्तर को बदलने का एक तरीका मिला, न कि प्रत्येक परिशिष्ट '। –

+0

क्षमा करें, मुझे आपकी टिप्पणी याद आई। प्रोग्रामिक रूप से भी संभव होना चाहिए। यहां आप देख सकते हैं कि सभी परिशिष्टों को कैसे प्राप्त करें: http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

LevelRangeFilter उपयोग

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

अरे, क्योंकि यह प्राकृतिक उपयोग है प्रपत्र, मैंने इस विकल्प को आजमाया लेकिन यह मुझे * FATAL और ERROR के बीच के स्तरों के साथ संदेशों को लॉग इन करने के लिए मजबूर करता है, जो मैं नहीं चाहता (भले ही त्रुटि और FATAL आसन्न हैं, सिद्धांत अभी भी लागू होता है)। वैसे भी धन्यवाद! –

2

यह शांत कैसे log4net फिल्टर सभी वांछित उत्पादन प्राप्त करने के लिए जोड़ा जा सकता है है। डिफ़ॉल्ट रूप से सभी लॉग प्रविष्टियों में डिफ़ॉल्ट रूप से एक "तटस्थ" फ़िल्टर स्वभाव और log4net होता है जो तटस्थ सभी प्रविष्टियों को लॉग करता है।

क्या LevelRangeFilter क्या करेंगे अगर प्रविष्टि के स्तर रेंज में है, यह फिल्टर स्वभाव "स्वीकार करें" सेट (या उसके स्वभाव छोड़ के रूप में यह है, तो acceptOnMatch पैरामीटर false पर सेट किया जाता था) और इसे जाएगा "Deny" के स्वभाव के साथ सीमा में नहीं सभी प्रविष्टियों को चिह्नित करेगा।

LevelMatchFilter "स्वीकार" जब तक acceptToMatchfalse पर सेट है फिल्टर levelToMatch पैरामीटर में निर्दिष्ट के लिए स्वभाव सेट हो जाएगा, तो यह प्रविष्टियों मिलान "अस्वीकार करें", बेजोड़ प्रविष्टियों कि वे क्या कर रहे थे करने के लिए छोड़ दिया जाएगा स्थापित करेगा पहले।

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

यह आपको आसानी से टॉगल स्तर पर और बंद चेतावनी देने के लिए अनुमति देगा:

तो आप क्या कर सकते आप क्या चाहते हैं पाने के लिए दो फिल्टर के संयोजन का उपयोग है। सीमा के बाहर की सभी प्रविष्टियां पहले से ही "डेनी" के रूप में चिह्नित हैं और LevelMatchFilter यहां डैन के लिए WARN स्तर प्रविष्टियों को चिह्नित करेंगे, इसलिए DenyAllFilter आवश्यक नहीं है।

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