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

时间:2019-10-28 09:20:15

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

我可以在.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);

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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