Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Serilog.Sinks.MSSqlServer未填充自定义列_Sql Server_Asp.net Core_Serilog - Fatal编程技术网

Sql server Serilog.Sinks.MSSqlServer未填充自定义列

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

我环顾四周,但找不到有效的解决方案,因为所有的例子看起来都很相似,我想一定是我忽略了一些显而易见的东西。 还请注意,这是我第一个使用.NET Core和Serilog的真实项目

问题 我正在尝试(使用serilog)将一些自定义属性记录到数据库中它们自己的列中,这些列在
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;