如何使用 NLog 将日志范围包含到日志文件中

How to include logging scope into the log file using NLog

我正在使用 NLog.Extensions.Logging

使用方法 AddNLog() 注册记录器工厂时,可以使用 NLogProviderOptions.IncludeScopes 启用日志范围。

但是如何让 NLog 将日志范围写入文件?

我在 available layouts

的列表中没有找到任何类似的东西

一个例子:

这样记录:

// logger is here of type Microsoft.Extensions.Logging.ILogger
using (logger.BeginScope(new[] { new KeyValuePair<string, object>("userid", request.UserId) }))
{
   logger.LogDebug("My log message");
}

像这样渲染:${mdlc:userid}

例如在文件目标中:

 <target name="file" xsi:type="File"
     layout="${longdate} ${logger} ${message}${exception:format=ToString}, user: ${mdlc:userid}" 
     fileName="${basedir}/${shortdate}.log" />

注意:NLogProviderOptions.IncludeScopes 默认启用。

直接NLog

语法有点笨拙,但那是因为微软的抽象有点受限。另请参阅此问题:.NET - Logging structured data without it appearing in the text message

如果直接引用NLog,还可以:

using (NLog.MappedDiagnosticsLogicalContext.SetScoped("userid", request.UserId))
{
   // logger here of type NLog.Logger
   logger.Info("My log message");
}

这也是用 ${mdlc:userid}

呈现的

解释了 NLog 的更多示例和不同范围here

文档

PS:我已经更新了 available layouts,所以你会发现它更容易:)