You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 01:03:25