Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

Log4net कस्टम एपेंडर का उपयोग कर एसक्यूएल डेटाबेस में कस्टम ऑब्जेक्ट लिख रहा है?

यह साइट मुझे सही दिशा में इंगित किया।

लॉग पर अपनी वस्तु को सफलतापूर्वक लिखने के लिए मुझे एक कस्टम लेआउट पैटर्न और पैटर्न कनवर्टर बनाना पड़ा। डेटाबेस में मुझे जो अजीब "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>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL एजेंट कार्य में संग्रहीत कार्यविधि को कैसे निष्पादित करूं?

  2. SQL सर्वर में Msg 8117 "संचालन डेटा प्रकार varchar योग ऑपरेटर के लिए अमान्य है" को ठीक करें

  3. लिंक टू एंटिटीज:एनटीएक्स्ट फ़ील्ड पर ToLower () का उपयोग करना

  4. Entity Framework के साथ .Net MVC3 का उपयोग करके SQL सर्वर डेटाबेस में फ़ाइल स्टोर करें

  5. क्लाउड-आधारित डेटाबेस निगरानी समाधान के 5 सुरक्षा लाभ