यह साइट मुझे सही दिशा में इंगित किया।
लॉग पर अपनी वस्तु को सफलतापूर्वक लिखने के लिए मुझे एक कस्टम लेआउट पैटर्न और पैटर्न कनवर्टर बनाना पड़ा। डेटाबेस में मुझे जो अजीब "12wo" टेक्स्ट मिल रहा था, वह इसलिए निकला क्योंकि रूपांतरण पैटर्न प्रिंटफ सी स्टाइल सिंटैक्स का उपयोग करता है। बहरहाल, यह रहा कुछ कोड।
public class TestLayoutPattern : PatternLayout
{
public TestLayoutPattern()
{
AddConverter(new ConverterInfo
{
Name = "test",
Type = typeof (TestConverter)
});
}
}
public class TestConverter : PatternConverter
{
protected override void Convert(System.IO.TextWriter writer, object state)
{
if (state == null)
{
writer.Write(SystemInfo.NullText);
return;
}
var loggingEvent = state as LoggingEvent;
if (loggingEvent == null)
throw new NullReferenceException("loggingEvent");
var test = loggingEvent.MessageObject as Test;
if (test == null)
{
writer.Write(SystemInfo.NullText);
}
else
{
switch (Option.ToLower())
{
case "one":
writer.Write(test.One);
break;
case "two":
writer.Write(test.Two);
break;
default:
writer.Write(SystemInfo.NullText);
break;
}
}
}
}
नाम से लकड़हारे का उदाहरण कैसे प्राप्त करें:
private static readonly ILog TestLogger = LogManager.GetLogger("TestLogger");
लॉग में टेस्ट ऑब्जेक्ट लिखने का तरीका यहां दिया गया है।
TestLogger.Info(new Test {One = "field one", Two = "field two"});
यहां बताया गया है कि कैसे एक पैरामीटर को web.config में परिभाषित किया जाना चाहिए।
<parameter>
<parameterName value="@one" />
<dbType value="String" />
<size value="50" />
<layout type="MyApp.TestLayoutPattern">
<conversionPattern value="%test{one}" />
</layout>
</parameter>
ध्यान देने वाली एक और बात web.config का रूट और लॉगर सेक्शन है। रूट सेक्शन में वह जगह है जहां डिफ़ॉल्ट लॉगर को इसके स्तर सेट के साथ परिभाषित किया जाता है। मैं अपने कस्टम टेस्टलॉगर को एक लॉगर सेक्शन में परिभाषित कर सकता हूं जो नीचे दिखाए गए अनुसार एपेंडर को संदर्भित करेगा। यह मुझे ऊपर दिखाए गए नाम से टेस्टलॉगर तक पहुंचने की अनुमति देता है।
<root>
<level value="ALL"/>
<appender-ref ref="ADONetAppender"/>
</root>
<logger additivity="false" name="TestLogger">
<level value="ALL"/>
<appender-ref ref="TestAppender" />
</logger>
मैंने यह भी पाया कि यदि आप डिफ़ॉल्ट ADONetAppender में कुछ गुण जोड़ना चाहते हैं (और तालिका में कुछ फ़ील्ड जोड़ना चाहते हैं), तो आप इसके बजाय log4net.ThreadContext का उपयोग उन गुणों को सेट करने के लिए कर सकते हैं:
log4net.ThreadContext.Properties["MyCustomPrperty"] = value;
फिर पैरामीटर सेक्शन के तहत web.config में आप उस प्रॉपर्टी को इस तरह एक्सेस कर सकते हैं:
<parameter>
<parameterName value="@myCustomProperty"/>
<dbType value="String"/>
<layout type="log4net.Layout.RawPropertyLayout">
<key value="MyCustomProperty" />
</layout>
</parameter>