如何在不在消息中引用参数的情况下向 .Net Core 结构化日志记录添加参数?

How to add a parameter to .Net Core structured logging without referencing it in a message?

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

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

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

我试图在不在消息本身中包含 属性 的情况下做同样的事情,但无法确定它。这是我到目前为止所做的,它不会导致 属性 in NLog:

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

这导致消息没有 属性。有更好的方法吗还是我做错了什么?

Microsoft-Extension-Logging (MEL) ILogger 接口的整个想法不依赖于特定的日志记录框架。

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

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

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