Цитируя API doc из SMTPAppender:
запускающего критерии могут быть изменены путем установки evaluatorClass свойство с именем класса, реализующим 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="[email protected]" />
<param name="To" value="[email protected]" />
<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>
Надеется, что это помогает!