c# - 如何使用 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 - 记录结构化数据而不出现在文本消息中
如果你直接引用 NLog,你也可以这样做:
using (NLog.MappedDiagnosticsLogicalContext.SetScoped("userid", request.UserId))
{
// logger here of type NLog.Logger
logger.Info("My log message");
}
这也是用${mdlc:userid}
此处解释了 NLog 的更多示例和不同范围
文档
PS:我已经更新了可用的布局,所以你会发现它更容易:)
推荐阅读
- python - PyQT5 多线程问题
- visual-studio-code - 为 A4 格式设置标尺 - Visual Studio Code
- python - 在 python 中查看普通 DataFrame 时出现问题,看起来像字符串
- c# - Intellisense 不会在 C# 类库中显示附加属性
- java - Java 客户端中带有 wsHttpBinding Axis2 的 WCF 服务的安全令牌问题
- python-3.x - Knime 的 Python 脚本节点无法识别 Windows 10 环境变量
- swift - 自定义 MapView 类 Swift
- javascript - Angular:动态渲染时,SVG 路径标记不可见
- python - 为什么 `conda env export` 没有列出所有 pip 包?
- java - 在 Java 中使用 PHash (OpenCV)