Kami memindahkan logging kami dari log4net ke Serilog. Kami masuk dari log4net ke server MSSQL jarak jauh kami. Kita perlu menjaga tabel dan kolom itu tetap utuh karena tim lain menggunakannya, tapi kita perlu mengirim log Serilog kita ke dalamnya. Melihat ke https://github.com/serilog/serilog-sinks-mssqlserver Saya tidak dapat melihat bagaimana kami dapat menautkan kolom lama kami ke data log. Saya dapat menambahkan kolom di dalam tag Kolom dan menghapus semua kolom standar, tetapi saya tidak tahu cara memasukkan data serilog ke kolom tersebut.

Jadi inilah tabel log kami saat ini:

CREATE TABLE [dbo].[EventLog]
(
    [EventID] [INT] IDENTITY(1,1) NOT NULL,
    [Date] [DATETIME] NOT NULL,
    [Type] [VARCHAR](10) NOT NULL,
    [Logger] [VARCHAR](255) NOT NULL,
    [Thread] [VARCHAR](255) NOT NULL,
    [Message] [VARCHAR](MAX) NOT NULL,
    [MoResponse] [VARCHAR](MAX) NULL,
    [StackTrace] [VARCHAR](MAX) NULL,
    [MoStatus] [VARCHAR](255) NULL,
    [MoTransactionID] [VARCHAR](255) NULL,

    CONSTRAINT [PK_EventLog] 
        PRIMARY KEY CLUSTERED ([EventID] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,  
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Saya lebih suka tidak harus membuat tabel log baru. Saya hanya tidak tahu cara memetakan serilog data yang muncul ke kolom ini (terutama di Web.config xml). Terima kasih sebelumnya.

2
Ross Gustafson 19 Agustus 2019, 22:15

1 menjawab

Jawaban Terbaik

Pemetaan dilakukan melalui nama-nama properti yang tersedia, baik melalui template pesan, atau properti yang ditambahkan melalui pengaya.

Log.Logger("{EventID} some message", eventId);

Di atas akan memetakan properti EventID ke bidang yang disebut EventID dalam database.

Yaitu Setiap pesan log harus memiliki properti dengan nama yang sama persis dengan bidang dalam tabel (peka huruf besar-kecil):

  • EventID
  • Date
  • Type
  • Logger
  • Thread
  • Message
  • MoResponse
  • StackTrace
  • MoStatus
  • MoTransactionID

Anda mungkin ingin menggunakan satu set pengaya untuk menentukan sebagian besar properti ini secara otomatis. Mungkin lebih mudah untuk hanya menulis pengaya Anda sendiri yang menangani penambahan properti yang dapat disertakan secara otomatis, dengan memanggil pengaya lainnya sesuai kebutuhan.

Saya sarankan untuk membaca dengan cermat dokumentasi untuk Kolom Properti Khusus untuk lihat bagaimana mereka dikonfigurasi, dalam kode, dan melalui file konfigurasi.


Ps: Mungkin lebih mudah untuk menulis wastafel kustom Anda sendiri, meminjam bagian penting dari Serilog.Sinks.MSSqlServer yang Anda butuhkan.

6
C. Augusto Proiete 20 Agustus 2019, 03:53