ASP.NET Core 中的 Serilog - 在其自己的列中记录 EventId

Serilog in ASP.NET Core - logging the EventId in its own column

ASP.NET Core logging有'Log event ID',
这个概念 这样我们就可以像这样记录行(来自他们的文档);

_logger.LogInformation(LoggingEvents.GET_ITEM, "Getting item {ID}", id);

Serilog 在属性列

中写入此信息 LoggingEvents.GET_ITEM
<property key='EventId'>
<structure type=''>
  <property key='Id'>1002</property>
</structure>

我在数据库的 table 中添加了一个新列 'EventId',并将此 ColumnOptions 添加到记录器

columnOptions.AdditionalDataColumns = new List<DataColumn>
        {
            new DataColumn {DataType = typeof(byte), ColumnName = "EventId"},
            new DataColumn {DataType = typeof(string), ColumnName = "SessionId"}
        };  

但是Serilog 不会向数据库写入任何内容。仅当我删除此行时:
new DataColumn {DataType = typeof(byte), ColumnName = "EventId"},
Serilog 是否将行写入数据库,但没有 EventId 列。
事件id怎么写?

EventId in ASP.NET Core 不是一个整数,而是一个结构,它可能包含一个整数、一个字符串,(实际上)两者都不是,或两者都包含。

https://github.com/aspnet/Logging/blob/dev/src/Microsoft.Extensions.Logging.Abstractions/EventId.cs

当它到达 SQL 服务器接收器时,不幸的是,它无法转换为数字列。我认为您需要将列指定为文本才能正常工作。