【问题标题】:How to add a parameter to .Net Core structured logging without referencing it in a message?如何将参数添加到 .Net Core 结构化日志记录而不在消息中引用它?
【发布时间】:2019-10-28 09:20:15
【问题描述】:

我可以在 .net core 中做到这一点

_logger.LogInformation("Token validated {clientId}", "MyId");

然后像NLog 这样的日志库会知道消息中有一个名为clientId 的属性,其值为MyId,并且可以以特殊方式呈现它。

我正在尝试在消息本身中不包含该属性的情况下执行相同的操作,但无法确定它。这是我到目前为止所做的,它不会导致NLog 中的属性:

 LogEventInfo info = new LogEventInfo
 {
    Properties = {{"clientId", "MyId"}},
 };
 _logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, "Token validated", info, null, info.MessageFormatter);

这会导致消息没有属性。有没有更好的方法来做到这一点,还是我做错了什么?

【问题讨论】:

    标签: c# logging .net-core nlog structured-logging


    【解决方案1】:

    Microsoft-Extension-Logging (MEL) ILogger-interface 的整个想法不依赖于特定的 Logging-Framework。

    如果您开始创建 NLog LogEventInfo-objects,那么您不妨调用 NLog.LogManager.GetCurrentClassLogger() 并将其用作 Logger。

    但也许这个 wiki 页面可以给你一些想法:

    https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-properties-with-Microsoft-Extension-Logging

    【讨论】:

    • 您好,是的,感谢您的回答。我真的不明白 LogEventInfo 来自 NLog 而不是来自 MS 本身。所以我想我只需要遵循模式并创建自己的模式?有点奇怪,没有简单的方法来发送参数......
    • @IlyaChernomordik 我的答案中的链接显示了如何引入自定义属性。也可以为这个问题加油:github.com/aspnet/Extensions/issues/668
    • 谢谢,这个问题已经 3 年没有进展了 :)
    • @IlyaChernomordik 我可以在问题的底部看到一个代码示例,这是来自微软官方开发人员的官方“解决方案”。类似于我的答案中 wiki-page-link 中的代码示例。但奇怪的是,微软的结构化日志记录总是使用消息模板。
    猜你喜欢
    • 2021-01-16
    • 2021-02-14
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多