2010-01-07 12 views
23

मेरे आवेदन में, मैं log4net का उपयोग करता हूं, सभी प्रकार के अपने स्वयं के लॉगर को उनके प्रकार के आधार पर बनाते हैं - उदा। :क्या log4net कॉन्फ़िगरेशन में वाइल्डकार्ड लॉगर नाम संभव है?

private static readonly ILog Log = LogManager.GetLogger(typeof(Program)); 

जैसा कि मैं विकसित कर रहा हूं, मैं अपने कोड से सभी लॉग आउटपुट को पकड़ने के लिए DEBUG पर रूट लॉगर छोड़ देता हूं।

हालांकि, एक तीसरी पार्टी के घटक भी इस एक ही दृष्टिकोण का उपयोग करता है, लेकिन लॉग संदेशों एक दूसरे, जिनमें से कोई भी मेरी रुचि का की 100s पैदा कर रहा है।

लकड़हारा में wildcarding किसी प्रकार का उपयोग करने के लिए क्या यह संभव है कॉन्फ़िगरेशन, अपने सभी लॉगर्स को केवल WARN पर लॉग इन करने के लिए मजबूर करने के लिए, उदाहरण के लिए :

<logger name="com.thirdparty.*"> 
    <level value="WARN"/> 
    </logger> 

[सटीक उदाहरण से ऊपर, एक * का उपयोग कर काम नहीं करता है]

उत्तर

34

तो यह है कि नाम स्थान (नेस्टेड सहित) के भीतर सभी संदेशों पर लागू होगा तुम सिर्फ एक नाम स्थान का हिस्सा निर्दिष्ट कर सकते हैं।

<root> 
    <level value="FATAL" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 

    <logger name="MyCompany.Web" > 
    <level value="WARN" /> 
    <appender-ref ref="WebErrors" /> 
    </logger> 

    <!-- Will log all FATALs from NHibernate, including NHibernate.SQL and all the nested --> 
    <logger name="NHibernate" > 
    <level value="FATAL" /> 
    </logger> 

इसके अतिरिक्त मैं मैनुअल पढ़ने की सिफारिश करेंगे:

यहाँ उदाहरण मैं अक्सर इस्तेमाल करते हैं। यह बहुत सारी व्याख्या प्रदान करता है। उदाहरण के लिए आप Logger Hierarchy पढ़ सकते हैं।

एक लकड़हारा अगर इसके नाम के बाद एक डॉट वंशज लकड़हारा नाम का एक उपसर्ग है एक और लकड़हारा के एक पूर्वज होना कहा जाता है: यहाँ वहाँ से उद्धरण है। यदि वंश के लॉगर के बीच कोई पूर्वजों नहीं है तो एक लॉगर को बच्चे के लॉगर के माता-पिता कहा जाता है। पदानुक्रम काम करता है जैसे नामस्थान और .NET में वर्ग पदानुक्रम।

और यह भी:

स्तर विरासत: एक दिया लकड़हारा एक्स के लिए विरासत में मिला स्तर, शुरू, लकड़हारा पदानुक्रम में पहले में गैर-शून्य स्तर के बराबर है एक्स पर और रूट लॉगर की ओर पदानुक्रम में ऊपर की ओर बढ़ रहा है।

+0

@Dmitriy - आप सही हैं। मुझे नहीं पता था! मैं अब पूछने के लिए लगभग मूर्खतापूर्ण महसूस करता हूं :)। जवाब के लिए धन्यवाद। –

+0

वाह, मैं या तो। यह अच्छी जानकारी है। –

+0

बीटीडब्लू, जो कि लॉग 4नेट वेबसाइट पर अच्छी तरह से प्रलेखित है। मैंने जवाब के लिंक को जोड़ा। –

4

आप क्या कह रहे हैं के विपरीत नहीं कर सकते। मेरा मतलब है कि डिफ़ॉल्ट लॉग स्तर को पर चेतावनी दें और उसके बाद DEBUG को परिभाषित विशिष्ट लॉगर्स सेट करें।

इसके अलावा, आप अपने एपेंडर की दहलीज DEBUG पर सेट कर सकते हैं और अन्य एपेंडर ने WARN सेट किया है।

उदाहरण के लिए:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
    <applicationName value="Application" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    <threshold value="WARN" /> 
</appender> 

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Notification" /> 
    <smtpHost value="server01" /> 
    <bufferSize value="1" /> 
    <lossy value="false" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
     <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> 
    </layout> 
    <threshold value="DEBUG" /> 
</appender> 
+0

@ ब्रायन - उत्तर के लिए धन्यवाद। हाँ - मैं * कर सकता था लेकिन समस्या यह है कि मेरे पास कई प्रकार हैं। लॉगिंग करने के लिए श्वेतसूची दृष्टिकोण लेने के लिए मेरी लॉगिंग कॉन्फ़िगरेशन बड़ी और अनावश्यक हो जाएगी, यही कारण है कि मैं एक ब्लैकलिस्ट दृष्टिकोण के बारे में सोच रहा था। –

+0

समझा। मैं आपके द्वारा परिभाषित किए गए कितने अन्य लॉगर्स के आधार पर एक संभावित दृष्टिकोण दे रहा था। मैंने ऐपेंडर स्तर पर सीमा तय करने का सुझाव देने के लिए अपना जवाब अपडेट किया। फिर अपने एपेंडर को अभी भी DEBUG पर सेट करते समय उचित थ्रेसहोल्ड के साथ एपेंडर का उपयोग करने के लिए तृतीय पक्ष लाइब्रेरी को बदलें। –

+0

@ ब्रायन - किसी भी मामले में सुझाव के लिए धन्यवाद - यदि आपके पास केवल कुछ लॉगर्स हैं तो यह एक अच्छा तरीका है। सुझाव के आपके दूसरे भाग के लिए - मेरे मामले में मैं दोनों एक ही लक्ष्य (एक लॉग फ़ाइल, या एक कंसोल विंडो) पर जाना चाहता हूं। क्या यह दृष्टिकोण अभी भी वहां काम करेगा? –

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