如何使用 NLog 将日志范围包含到日志文件中
How to include logging scope into the log file using NLog
我正在使用 NLog.Extensions.Logging
。
使用方法 AddNLog()
注册记录器工厂时,可以使用 NLogProviderOptions.IncludeScopes
启用日志范围。
但是如何让 NLog 将日志范围写入文件?
的列表中没有找到任何类似的东西
一个例子:
这样记录:
// 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,所以你会发现它更容易:)
我正在使用 NLog.Extensions.Logging
。
使用方法 AddNLog()
注册记录器工厂时,可以使用 NLogProviderOptions.IncludeScopes
启用日志范围。
但是如何让 NLog 将日志范围写入文件?
的列表中没有找到任何类似的东西一个例子:
这样记录:
// 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,所以你会发现它更容易:)