如何将参数添加到 .Net Core 结构化日志记录而不在消息中引用它?

Ily*_*dik 7 c# logging nlog .net-core structured-logging

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

_logger.LogInformation("Token validated {clientId}", "MyId");
Run Code Online (Sandbox Code Playgroud)

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

我试图做同样的事情,而不将属性包含在消息本身中,但无法成功解决它。这是我到目前为止所做的,它不会导致以下属性NLog

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

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

Rol*_*sen 4

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

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

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

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