使用 ASP.NET 4.6.2、NLog 版本 5.1.2,当某些事件属性设置为布尔值 true 时,尝试使用 Mail 目标记录事件。这是行不通的。但在我看来它确实可以在不同的应用程序中工作。其他邮件目标可以在同一应用程序中工作。
目标配置:
<target name="MyEmailMessage" xsi:type="Mail"
enableSsl="true"
useSystemNetMailSettings="true"
to="${event-properties:LookupEmailTo}"
from="${appsetting:name=NLogEmailFrom}"
subject="${event-properties:Subject}"
html="true"
addNewLines="true"
replaceNewlineWithBrTagInHtml="true"
body="${message}" />
记录器配置:
<logger name="WebApp.Controllers.MyController" minlevel="Trace" writeTo="MyEmailMessage">
<filters defaultAction="Ignore">
<when condition="'${event-properties:SendEmail}' == true" action="Log"/>
</filters>
</logger>
控制器操作中的 C# 代码:
string body = $"some formatted string";
Log.WithProperty("LookupEmailTo", string.Join(",", emails.Distinct()))
.WithProperty("Subject", Resources.EmailSubject)
.WithProperty("SendEmail", true).Info(body);
我有另一个邮件目标,在同一调用期间在同一控制器操作中使用 Log.Error() 成功运行,但没有过滤器。
“好”目标:
<target name="EmailMessage" xsi:type="Mail"
useSystemNetMailSettings="true"
to="${appsetting:name=NLogEmailTo}"
from="${appsetting:name=NLogEmailFrom}"
subject="${appsetting:name=AppEnvironment} ${appsetting:name=AppName} ${level} (${machinename})"
html="true"
addNewLines="true"
replaceNewlineWithBrTagInHtml="true"
body="${message}${newline}${newline}Location: ${callsite}${newline}${newline}${exception}" />
“好”记录器:
<logger name="*" minlevel="Error" writeTo="EmailMessage" />
“好”C# 调用:
Log.Error(ex, "Error calling {objectId}", objId);
我在 NLOG.config 和日志中启用了内部日志记录 告诉我有关错误电子邮件日志的各种详细信息。但当我调用控制器操作时,它没有提及其他电子邮件日志。
我将 NLog 的库更新到以下版本:
初步测试表明它现在正在工作。将在部署的测试中查看它的进展情况。