如何在 XML 中仅使用 Serilog.Sinks.MSSQLServer 中的自定义列?

How to use only custom columns in Serilog.Sinks.MSSQLServer in XML?

我们正在将日志记录从 log4net 转移到 Serilog。我们从 log4net 登录到我们的远程 MSSQL 服务器。我们需要保持 table 和列完好无损,因为其他团队正在使用它,但我们需要将我们的 Serilog 日志发送到其中。查看 https://github.com/serilog/serilog-sinks-mssqlserver 我看不出我们如何可以 link 我们的旧列到日志数据。我可以在 Columns 标签中添加列并删除所有标准列,但我不知道如何将 serilog 数据记录到这些列中。

这是我们当前的日志 table:

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

我不想创建新日志 table。我只是不知道如何将弹出的数据 serilog 映射到这些列(特别是在 Web.config xml 中)。提前致谢。

映射是通过可用属性的名称完成的,可以是通过消息模板,也可以是通过增强器添加的属性。

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

以上将 属性 EventID 映射到数据库中名为 EventID 的字段。

即每条日志消息都需要具有与 table(区分大小写)中的字段名称完全相同的属性:

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

您可能希望根据需要使用一组 enrichers to define most of these properties automatically. It might be easier to just write your own enricher that takes care of adding the properties that can be automatically included, calling other enrichers

我建议仔细阅读 Custom Property Columns 的文档,了解它们是如何配置的,在代码中,以及通过配置文件。


ps:编写自己的自定义接收器可能更容易,借用您需要的 Serilog.Sinks.MSSqlServer 的基本部分。