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



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

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

映射是通过可用属性的名称(通过消息模板或通过扩充器添加的属性(完成的。

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

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

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

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

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

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


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

最新更新