Sql server Serilog.Sinks.MSSqlServer未填充自定义列
我环顾四周,但找不到有效的解决方案,因为所有的例子看起来都很相似,我想一定是我忽略了一些显而易见的东西。 还请注意,这是我第一个使用.NET Core和Serilog的真实项目 问题 我正在尝试(使用serilog)将一些自定义属性记录到数据库中它们自己的列中,这些列在Sql server Serilog.Sinks.MSSqlServer未填充自定义列,sql-server,asp.net-core,serilog,Sql Server,Asp.net Core,Serilog,我环顾四周,但找不到有效的解决方案,因为所有的例子看起来都很相似,我想一定是我忽略了一些显而易见的东西。 还请注意,这是我第一个使用.NET Core和Serilog的真实项目 问题 我正在尝试(使用serilog)将一些自定义属性记录到数据库中它们自己的列中,这些列在appsettings.json中定义,并通过管道上的中间件添加。但是,即使在properties XML列中正确填写了相同的项,这些值仍然为NULL 因此,我为经过身份验证的用户提供了预期的新属性: <properties
appsettings.json中定义,并通过管道上的中间件添加。但是,即使在properties XML列中正确填写了相同的项,这些值仍然为NULL
因此,我为经过身份验证的用户提供了预期的新属性:
<properties>
<property key="UserId">ff88ddb9-6f5a-4ad5-a2a8-1d016ff99398</property>
<property key="UserName">ernst</property>
<properties>
此外,除了不填充自定义列之外,数据库也是以标准方式创建的,没有这些列,所以我手动添加了它们
这可能指向配置问题
用于创建表的SQL语句:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SeriLog_Custom](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Message] [nvarchar](max) NULL,
[MessageTemplate] [nvarchar](max) NULL,
[Level] [nvarchar](128) NULL,
[TimeStamp] [datetime] NOT NULL,
[Exception] [nvarchar](max) NULL,
[Properties] [xml] NULL,
[UserId] [nvarchar](450) NULL,
[UserName] [nvarchar](256) NULL,
CONSTRAINT [PK_SeriLog_Custom] PRIMARY KEY CLUSTERED
(
[Id] 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
现在,我可以通过以下方式获得所需信息:
SELECT [Id]
,[Message]
,[MessageTemplate]
,[Level]
,[TimeStamp]
,[Exception]
,[UserId]
,[UserName]
,[Properties].value('(//property[@key="UserName"]/node())[1]', 'nvarchar(max)') as UserName
,[Properties]
FROM [ECSControl].[dbo].[SeriLog_ECMonitor]
where [Properties].value('(//property[@key="UserName"]/node())[1]', 'nvarchar(max)') = 'ernst'
order by id desc;
但我想通过以下方式访问它:
SELECT [Id]
,[Message]
,[MessageTemplate]
,[Level]
,[TimeStamp]
,[Exception]
,[UserId]
,[UserName]
,[Properties]
FROM [ECSControl].[dbo].[SeriLog_ECMonitor]
where UserName = 'ernst'
order by id desc;
最新稳定版本的Serilog.Sinks.MSSqlServer(5.1.2)
没有Microsoft.Extensions.Configuration
支持。与最新稳定版本的Serilog.Settings.Configuration(2.6.1)
()相同
更新到预发布版本Serilog.Sinks.MSSqlServer 5.1.3-dev-00204
和Serilog.Settings.Configuration 3.0.0-dev-00119
解决了此问题。感谢您提供的信息!我尝试了开发版本,但是出现了异常,所以我改用硬代码编写接收器,现在它可以工作了。有什么更新吗?Serilog.Sinks.MSSqlServer
现在是否有Microsoft.Extensions.Configuration
支持?谢谢。这节省了我的时间,我尝试了最新的版本,但我认为它还没有修复。@Ernst您有没有示例说明如何硬编码接收器?@Ernst您有没有示例说明如何硬编码接收器以填充新列?
SELECT [Id]
,[Message]
,[MessageTemplate]
,[Level]
,[TimeStamp]
,[Exception]
,[UserId]
,[UserName]
,[Properties].value('(//property[@key="UserName"]/node())[1]', 'nvarchar(max)') as UserName
,[Properties]
FROM [ECSControl].[dbo].[SeriLog_ECMonitor]
where [Properties].value('(//property[@key="UserName"]/node())[1]', 'nvarchar(max)') = 'ernst'
order by id desc;
SELECT [Id]
,[Message]
,[MessageTemplate]
,[Level]
,[TimeStamp]
,[Exception]
,[UserId]
,[UserName]
,[Properties]
FROM [ECSControl].[dbo].[SeriLog_ECMonitor]
where UserName = 'ernst'
order by id desc;