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

如何通过log4net收集所有ERROR级异常并统一发送邮件?

如何用Log4Net收集所有ERROR级异常并合并发送邮件?

要实现只收集ERROR级日志并批量合并发送邮件,核心是先过滤掉非ERROR级日志,再配置批量触发规则,避免buffer缓存其他级别日志。具体修改如下:

关键配置调整思路

  1. 添加级别过滤器:只允许ERROR级日志进入邮件Appender的缓存,确保buffer里只有异常日志
  2. 设置批量缓存大小:调整bufferSize为你期望的批量数量(比如5,积累5个ERROR时发送)
  3. 可选定时触发:添加时间评估器,避免ERROR数量不足时一直不发送邮件(比如每30分钟强制发送一次)

修改后的完整配置

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="xxx@xxx.email" />
    <from value="xxx@xxx.email" />
    <subject value="系统异常汇总 - 共%count%个错误" />
    <smtpHost value="host@host.host" />
    <port value="25" />
    <!-- 设置批量缓存的ERROR数量 -->
    <bufferSize value="5" />
    <lossy value="true" />
    
    <!-- 添加级别过滤器,仅保留ERROR级日志 -->
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR" />
        <acceptOnMatch value="true" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    
    <!-- 触发条件:当出现ERROR时检查是否满足发送规则 -->
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="ERROR" />
    </evaluator>
    
    <!-- 可选:定时触发,每30分钟发送一次(无论buffer是否满) -->
    <evaluator type="log4net.Core.TimeEvaluator">
        <interval value="30" /> <!-- 单位:分钟 -->
    </evaluator>
    
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline[%date] [%thread] %-5level %logger - %message%newline%exception%newline" />
    </layout>
</appender>

配置说明

  • 级别过滤器:LevelMatchFilter匹配ERROR级别,DenyAllFilter拒绝所有其他级别,确保只有ERROR日志进入缓存
  • bufferSize:设置为N时,当积累N个ERROR日志,就会自动发送一封汇总邮件
  • 双评估器:LevelEvaluator确保ERROR出现时触发检查,TimeEvaluator避免长时间没有达到bufferSize导致日志积压(比如夜间少量错误不会等到第二天才发送)
  • 主题优化:%count%变量会自动替换为当前邮件中的错误数量,方便直观看到异常规模

这样配置后,系统会将ERROR级日志批量缓存,要么积累到指定数量,要么到了定时时间,就会把所有缓存的ERROR合并成一封邮件发送,不会再每次ERROR单独发信,也不会混入INFO等其他级别日志。

内容的提问来源于stack exchange,提问作者Saiko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:50:30