ASP.NET 4.6.2中NLog 5.1.2带过滤器的Mail Target不生效问题
NLog邮件Target按事件属性过滤不生效问题
环境
- ASP.NET 4.6.2
- NLog 5.1.2
问题现象
配置带过滤器的Mail Target,要求当事件属性SendEmail为布尔值true时触发邮件发送,但该功能失效。相同配置在其他应用可正常运行,且同应用内无过滤器的Mail Target能正常工作。已启用NLog内部日志,仅能看到正常邮件的日志记录,失效的邮件无任何相关日志。
失效的配置与调用代码
Target配置
<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配置
<logger name="WebApp.Controllers.MyController" minlevel="Trace" writeTo="MyEmailMessage"> <filters defaultAction="Ignore"> <when condition="'${event-properties:SendEmail}' == true" action="Log"/> </filters> </logger>
控制器Action中的C#代码
string body = $"some formatted string"; Log.WithProperty("LookupEmailTo", string.Join(",", emails.Distinct())) .WithProperty("Subject", Resources.EmailSubject) .WithProperty("SendEmail", true).Info(body);
正常工作的对比配置(参考)
Target配置
<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配置
<logger name="*" minlevel="Error" writeTo="EmailMessage" />
控制器Action中的C#代码
Log.Error(ex, "Error calling {objectId}", objId);
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

