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

如何在NLog中针对不同Error类型配置不同邮件接收目标?

NLog多邮件目标区分发送实现方案

嘿,针对你提到的两类Error要分别触发NLog中A、B两个邮件目标的需求,我给你两个实用的实现思路,都是NLog官方推荐的常规做法:

方案一:通过Logger实例名称区分

这种方式适合两类Error属于不同业务模块的场景,通过创建不同名称的Logger实例,配合NLog规则来定向发送。

第一步:修改NLog配置,添加日志规则

在你的现有配置里补充<rules>节点,给不同名称的Logger绑定对应的邮件目标:

<rules>
  <!-- 第一类Error:指定Logger名称为"ErrorTypeA"的Error级日志发送到目标A -->
  <logger name="ErrorTypeA" level="Error" writeTo="A" final="true" />
  <!-- 第二类Error:指定Logger名称为"ErrorTypeB"的Error级日志发送到目标B -->
  <logger name="ErrorTypeB" level="Error" writeTo="B" final="true" />
  <!-- 可选:其他日志的处理规则(比如控制台、文件等) -->
  <logger name="*" level="Debug" writeTo="console" />
</rules>

说明:final="true"用来标记该日志已被处理,不会被后续规则重复匹配,避免日志被多目标发送,根据需要选择是否添加。

第二步:代码中调用对应Logger

在业务代码里,针对两类Error分别创建并调用对应名称的Logger:

// 第一类Error使用的Logger
var errorTypeALogger = NLog.LogManager.GetLogger("ErrorTypeA");
errorTypeALogger.Error("这是第一类Error,将发送到目标A的邮件收件人");

// 第二类Error使用的Logger
var errorTypeBLogger = NLog.LogManager.GetLogger("ErrorTypeB");
errorTypeBLogger.Error("这是第二类Error,将发送到目标B的邮件收件人");

方案二:通过自定义日志属性过滤

如果两类Error属于同一模块,不想创建多个Logger实例,可以通过给日志添加自定义属性,再在NLog规则里根据属性值过滤发送目标,灵活性更高。

第一步:修改NLog配置,添加带条件的日志规则

同样补充<rules>节点,通过condition属性判断自定义属性的值来定向发送:

<rules>
  <!-- 匹配自定义属性ErrorType为TypeA的Error级日志,发送到目标A -->
  <logger name="*" level="Error" writeTo="A" condition="${event-properties:item=ErrorType} == 'TypeA'" final="true" />
  <!-- 匹配自定义属性ErrorType为TypeB的Error级日志,发送到目标B -->
  <logger name="*" level="Error" writeTo="B" condition="${event-properties:item=ErrorType} == 'TypeB'" final="true" />
  <!-- 其他日志规则 -->
  <logger name="*" level="Debug" writeTo="console" />
</rules>

第二步:代码中添加自定义属性并记录日志

调用日志时,通过WithProperty方法给日志添加自定义属性,区分不同Error类型:

// 第一类Error:添加自定义属性ErrorType=TypeA
_logger.WithProperty("ErrorType", "TypeA").Error("这是第一类Error,发往目标A");

// 第二类Error:添加自定义属性ErrorType=TypeB
_logger.WithProperty("ErrorType", "TypeB").Error("这是第二类Error,发往目标B");

方案选择建议

  • 如果两类Error分属不同业务模块,用方案一更清晰,模块间日志边界明确;
  • 如果是同一模块内的不同错误场景,用方案二更灵活,不需要维护多个Logger实例。

内容的提问来源于stack exchange,提问作者Gavin.Sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:56:21