我的项目正在使用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
时也没有成功干杯
答案 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>
希望这有帮助!