2011-05-23 34 views
6

कॉन्फ़िगर करना मुझे मौजूदा log4net कॉन्फ़िगरेशन में एक एडो एपेंडर जोड़ने की आवश्यकता है।Log4net प्रोग्रामेटिक रूप से एक adoAppender

मुझे इसे कोड के माध्यम से जोड़ने की आवश्यकता है। हालांकि मैं संदेश जैसे सामान्य स्ट्रिंग पैरामीटर जोड़ने पर फंस गया हूं क्योंकि मैं लेआउट प्रॉपर्टी को सही तरीके से परिभाषित नहीं कर सकता: एक्सएमएल कॉन्फ़िगरेशन में, हम पैटर्न लयआउट का उपयोग करते हैं, लेकिन कोड के माध्यम से PatternLayout एक आईआरओएलआउट नहीं है इसलिए मुझे निम्न कोड के साथ एक त्रुटि है:

public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern) 
    { 
     log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter(); 
     param.ParameterName = paramName; 
     param.DbType = System.Data.DbType.String; 
     param.Size = size; 
     param.Layout = new log4net.Layout.PatternLayout(conversionPattern); 
     appender.AddParameter(param); 
    } 

कोई कोड में एक स्ट्रिंग पैरामीटर जो निम्नलिखित एक्सएमएल नमूना के समान है जोड़ने के बारे में पता है:

<parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
</parameter> 

उत्तर

17

मैं अंत में मिल गया है एक IRawLayout में PatternLayout को बदलने के लिए कैसे।

ऐसा करने के लिए, आप log4net.Layout.Layout2RawLayoutAdapter उपयोग करने के लिए:

public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern) 
    { 
     log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter(); 
     param.ParameterName = paramName; 
     param.DbType = System.Data.DbType.String; 
     param.Size = size; 
     param.Layout = new log4net.Layout.Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout(conversionPattern)); 
     appender.AddParameter(param); 
    } 
+0

छोटे टाइपो, यह "Layout2RawLayoutAdapter" (नहीं * पंक्ति *) होना चाहिए। – mlangsworth