Log4j.xml注入Evaluator

时间:2016-01-21 18:35:00

标签: java logging log4j

我的项目正在使用log4j 1.2.17。我已成功注入我的自定义" Evaluator"使用setEvaluatorClass

进入SMTPAppender
<appender name="email" class="org.apache.log4j.net.SMTPAppender">
  <param name="EvaluatorClass" value="path.to.my.Evaluator" />

但是,我想将一些参数传递给我的Evaluator,以使其可配置。我想使用SMTPAppender.setEvaluator,但我无法弄清楚如何在log4j.xml中设置它。另一个选项是the other SMTPAppender constructor,我在使用log4j.xml

时也没有成功

干杯

1 个答案:

答案 0 :(得分:0)

引用SMTPAppender的API doc

  

可以通过设置evaluateatorClass来修改触发条件   具有实现类的名称的属性   TriggeringEventEvaluator,使用。设置赋值器属性   TriggeringEventEvaluator的实例或嵌套triggeringPolicy   指定类实现TriggeringEventEvaluator的元素。

基本上,我可以使用嵌套的triggeringPolicy元素来模拟求值程序的行为。增加的优点是,我可以将参数传递给triggeringPolicy元素。

我有一个用于为每个n - 消息发送电子邮件摘要的用例。为此,我使用了以下TriggeringPolicy:

package org.email;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;


public class MyEvaluator implements TriggeringEventEvaluator {

    private volatile int num = 1;

    private int quotient = 1;

    @Override
    public boolean isTriggeringEvent(LoggingEvent event) {
        return num++ % quotient == 0;
    }

    public void setQuotient(int quotient) {
        this.quotient = quotient;
    }
}

我的log4j.xml配置,每两个日志事件发送一封邮件,如下所示:

<appender name="ErrorEmailAppender"     class="org.apache.log4j.net.SMTPAppender">
    <param name="SMTPHost" value="myHost" />
    <param name="From" value="xxxxx@yyy.com" />
    <param name="To" value="xxxxx@yyy.com" />
    <param name="Subject" value="Log of messages" />
    <triggeringPolicy class="org.email.MyEvaluator">
        <param name="quotient" value="2" />
   </triggeringPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%t %m%n"/>
    </layout>
</appender>

希望这有帮助!