2009-11-25 14 views
12

क्या डेटाबेस में अतिरिक्त फ़ील्ड डालना संभव है और log4net में उनका उपयोग करना संभव है? मेरे पास UserId है I log-table में एक अतिरिक्त फ़ील्ड में होना चाहता हूं।लॉग 4नेट और अतिरिक्त फ़ील्ड

मैं log4net.config में क्षेत्र को शामिल किया है:

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

लेकिन मैं अतिरिक्त डाटाबेस क्षेत्र का समर्थन करने के ILog इंटरफ़ेस कैसे अपडेट करते हैं। इसलिए मैं उदाहरण के लिए लॉग ऑन कर सकते हैं:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

उत्तर

19

आप log4net में "संदर्भ" सुविधा का उपयोग कर सकते हैं। असल में यह आपको उन गुणों को सेट करने की अनुमति देता है जिन्हें आप अपने लॉग एपेंडर में उपयोग कर सकते हैं। आप इन गुणों को विभिन्न क्षेत्रों (वैश्विक, थ्रेड इत्यादि) पर सेट कर सकते हैं। आपके मामले में मुझे लगता है कि आप जा सकते हैं (उदाहरण के लिए, बस के बाद उपयोगकर्ता में लॉग इन किया है):

log4net.ThreadContext.Properties["userid"] = userid; 

अपने विन्यास फाइल में, आप तो इस संपत्ति का उपयोग करें और प्रवेश appender करने के लिए इसे जोड़ सकते हैं। मुझे लगता है कि यह AdoNetAppender के लिए कुछ इस तरह होगा

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

कृपया ध्यान दें कि मैं ऊपर के टुकड़े के किसी भी संकलित नहीं किया है, इसलिए वे कुछ फेरबदल की जरूरत हो सकती है, लेकिन यह आप की यह कैसे कर सकता है एक सामान्य विचार देना चाहिए हल हो गया।

आप इस here के बारे में अधिक पढ़ सकते हैं।

Ps। मुझे लगता है कि एमडीसी.सेट जिसे पहले जवाब में संदर्भित किया गया है अप्रचलित है।

2

मुझे लगता है कि आप MDC.Set उपयोग करने के लिए अतिरिक्त संदर्भ मूल्यों को निर्धारित करने के लिए है। Tip #4 in this blog देखें।

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