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

Ros*_*son 2 .net xml asp.net configuration serilog

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

所以这是我们当前的日志表:

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
Run Code Online (Sandbox Code Playgroud)

我宁愿不必创建新的日志表。我只是不知道如何将弹出的数据 serilog 映射到这些列(尤其是在 Web.config xml 中)。提前致谢。

Cai*_*ete 6

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

Log.Logger("{EventID} some message", eventId);
Run Code Online (Sandbox Code Playgroud)

以上将属性映射EventIDEventID数据库中调用的字段。

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

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

您可能希望使用一组扩充器来自动定义大多数这些属性。编写您自己的扩充器可能更容易,它负责添加可以自动包含的属性,并根据需要调用其他扩充器

我建议您仔细阅读自定义属性列的文档,以了解它们是如何在代码中以及通过配置文件进行配置的。


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