首页 > 解决方案 > 如何使用 NLog 将日志记录范围包含到日志文件中

问题描述

我正在使用NLog.Extensions.Logging.

使用该方法注册记录器工厂时AddNLog(),可以使用NLogProviderOptions.IncludeScopes.

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

我在可用布局列表中没有找到类似的东西

标签: c#nlogmicrosoft-extensions-logging

解决方案


一个例子:

像这样记录:

// 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 - 记录结构化数据而不出现在文本消息中

如果你直接引用 NLog,你也可以这样做:

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

这也是用${mdlc:userid}

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

文档

PS:我已经更新了可用的布局,所以你会发现它更容易:)

在此处输入图像描述


推荐阅读