Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Log4net menulis objek khusus ke database sql menggunakan appender khusus?

Situs ini mengarahkan saya ke arah yang benar.

Saya harus membuat LayoutPattern dan PatternConverter khusus untuk menulis objek saya ke log dengan sukses. Ternyata teks "12wo" aneh yang saya dapatkan di database adalah karena pola konversi menggunakan sintaks gaya printf c. Bagaimanapun, ini beberapa kode.

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;
            }
        }
    }
}

Berikut ini cara mendapatkan instance logger berdasarkan nama:

private static readonly ILog TestLogger = LogManager.GetLogger("TestLogger");

Berikut adalah cara menulis objek Uji ke log.

TestLogger.Info(new Test {One = "field one", Two = "field two"});

Berikut adalah bagaimana parameter harus didefinisikan di web.config.

<parameter>
  <parameterName value="@one" />
  <dbType value="String" />
  <size value="50" />
  <layout type="MyApp.TestLayoutPattern">
    <conversionPattern value="%test{one}" />
  </layout>
</parameter>

Hal lain yang perlu diperhatikan adalah bagian root dan logger dari web.config. Di bagian root adalah tempat logger default didefinisikan dengan set levelnya. Saya dapat mendefinisikan TestLogger kustom saya di bagian logger yang akan mereferensikan appender seperti yang ditunjukkan di bawah ini. Ini memungkinkan saya untuk mengakses TestLogger dengan nama seperti yang ditunjukkan di atas.

<root>
  <level value="ALL"/>
  <appender-ref ref="ADONetAppender"/>
</root>
<logger additivity="false" name="TestLogger">
  <level value="ALL"/>
  <appender-ref ref="TestAppender" />
</logger>

Saya juga menemukan jika Anda hanya ingin menambahkan beberapa properti ke ADONetAppender default (dan menambahkan beberapa bidang ke tabel), Anda dapat menggunakan log4net.ThreadContext untuk mengatur properti tersebut seperti:

log4net.ThreadContext.Properties["MyCustomPrperty"] = value;

Kemudian di web.config di bawah bagian parameter Anda dapat mengakses properti itu seperti ini:

<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. Permintaan PIVOT pada catatan Berbeda

  2. Apa spesifikasi format Tanggal Heksadesimal di SQL server?

  3. Tipe Data Waktu di Sql Server 2005

  4. Temukan pengelola dalam daftar yang dipisahkan koma

  5. Perbarui Pernyataan menggunakan Gabung dan Grup Oleh