我正在使用 NLog.Extensions.Logging
。
使用方法 AddNLog()
注册日志工厂时,可以通过 NLogProviderOptions.IncludeScopes
启用日志作用域。
但是如何让 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
默认启用。
语法有点笨拙,但这是因为微软的抽象有点有限。另请参阅此问题:.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}
渲染
更多的例子和不同的范围解释于此处
PS:我已更新可用布局,以便您更轻松地找到 :)
logger.BeginScope("{userid}", request.UserId)
。 - Vladimir Shiyanovitem
是此渲染器的默认值,因此您可以跳过它。 - Julian