2016-01-21 2 views
0

Мой проект использует log4j 1.2.17. Я успешно впрыскиваю свой обычай «Evaluator» в SMTPAppender, используя setEvaluatorClass:Log4j.xml инъекционный калькулятор

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

Однако, я хотел бы передать некоторый Params моего оценщику, чтобы сделать его настраиваемым. Я хотел бы использовать SMTPAppender.setEvaluator, но я не могу понять, как установить это в log4j.xml. Другим вариантом было бы the other SMTPAppender constructor, который я также не увенчались успехом в использовании с помощью log4j.xml

Приветствия

ответ

0

Цитируя 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> 

Надеется, что это помогает!

Смежные вопросы