0

出于某种目的,我已经覆盖了 log4j smtp appender。问题是如果我保留<param name="Threshold" value="INFO"/> 那么它将正确发送邮件。但是,如果我保留<param name="Threshold" value="ERROR"/>,则不会发送任何邮件。问题是什么?请找到我的代码。

public class MyAppender extends SMTPAppender{
  @Override
    protected void sendBuffer() {
          //Some code to format email body

    }

}

log4j.xml

<!-- Appenders -->



<appender name="mail" class="com.service.MyAppender">
    <param name="BufferSize" value="2"/>
    <param name="BufferedIO" value="true"/>
    <param name="Threshold" value="ERROR"/>
    <param name="SMTPHost" value="myhost"/>
    <param name="From" value="abc@co.com"/>
    <param name="To" value="def@ld.com"/>
    <param name="Subject" value="Testing Testing"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{2}:%L - %m%n"/>
    </layout>
</appender>


<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="500"/>
    <appender-ref ref="mail"/>
</appender>


<root>
    <level value="ERROR" />
    <appender-ref ref="ASYNC" />
</root>

我查看了SMTPAppender源代码,我相信下面几行是问题所在。

if(evaluator.isTriggeringEvent(event)) {
      sendBuffer();
    }
4

1 回答 1

0

根据log4j 文档,所有值低于Treshold 的日志事件都将被过滤掉(即不发送)。

将阈值更改为更具限制性可能会过滤掉您案例中记录的所有消息。确保您确实有日志级别为 ERROR(或更高 - FATAL)的事件。

于 2013-10-21T16:14:00.373 回答