当我的应用程序发生异常时,我使用 NLog 发送电子邮件。这是我的目标的一部分:
<target xsi:type="Mail"
name="email"
subject="${level}:" .. >
我收到主题为“错误:”或“致命:”的电子邮件。这工作正常,但我想将 Exception.Message 添加到电子邮件的主题
是否可以在 NLog 中设置自定义属性。我不知道如何做到这一点,所以为了弄清楚我想要什么,这里是我正在尝试做的事情的一个例子:
m_oLogger.Fatal( oException.BuildMessage(), new {MyMessage=oException.Message});
*请注意,BuildMessage() 只是一个扩展方法,用于将完整的异常详细信息(包括内部异常)转换为可读字符串
在我的目标中:
<target xsi:type="Mail"
name="email"
subject="${level}: ${Custom.MyMessage}" .. >
然后我会收到主题如下的电子邮件:
致命:参数或中的语法错误 论据。服务器响应是: 帐号不存在
NLog 可以实现这种灵活性吗?如果没有,您是否知道另一个提供此类功能的 .NET 日志平台?
一般来说,可以使用EventProperties-Layout-Renderer,而不是创建wageoghe建议的自定义layoutRenderer,它允许传递任意数量的自定义属性
LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "", "Pass my custom value");
theEvent.Properties["MyValue"] = "My custom string";`
log.Log(theEvent);
并在您的 NLog.config 文件中:
${event-properties:item=MyValue} -- renders "My custom string
对于特定的 https://github.com/nlog/NLog/wiki/Exception-Layout-Renderer 格式应该是
${exception:format=message}
向 NLog 添加自定义 LayoutRenderer 非常容易。请参阅我对这个问题的第一个回答,了解 LayoutRenderer 的示例,该示例允许您将 System.Diagnostics.Trace.CorrelationManager.ActivityId 值添加到日志输出中。
要做你想做的事,你可能不需要自定义 LayoutRenderer。如果您想发送主题为日志级别加上异常的 Message 属性的电子邮件,您应该能够配置如下内容:
<target xsi:type="Mail"
name="email"
subject="${level}: ${exception.Message}" ..>
这应该通过连接 Exception.Message 属性的级别和值来创建电子邮件的主题。您必须调用以异常作为参数的日志记录重载。
这有帮助吗?
这可能不切实际:我相当确定 NLog 框架没有将反射作为其日志记录格式的一部分[这样做需要 NLog 对引用的程序集在哪里以及它们的类型有某种概念.]
您能否简单地在 C# 代码中完成所有消息解析/格式化,并将其作为现有变量的一部分传递?他们在Mail-target NLog 文档中列出了很多这些内容。