【问题标题】:Serilog in ASP.NET Core - logging the EventId in its own columnASP.NET Core 中的 Serilog - 在自己的列中记录 EventId
【发布时间】:2017-10-25 21:17:46
【问题描述】:

ASP.NET Core 日志记录具有“日志事件 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>

我在数据库的表中添加了一个新列“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?

【问题讨论】:

    标签: c# asp.net-core serilog


    【解决方案1】:

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

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

    不幸的是,当它到达 SQL Server 接收器时,它无法转换为数字列。我认为您需要将列指定为文本才能使用。

    【讨论】:

    • 优秀。谢谢 Nicholas,也感谢你提供了这个很棒的图书馆。
    • 我尝试了一个解构器,但它不起作用:(。还需要走字符串方式
    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多