注入Log4j.xml的评估器[英] Log4j.xml injecting Evaluator

本文是小编为大家收集整理的关于注入Log4j.xml的评估器的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我的项目使用log4j 1.2.17.我已经成功地将我的自定义"评估器"注入了SMTPAppender,使用

但是,我想将一些参数传递给我的评估器,以使其可配置.我想使用 smtpappender.setevaluator ,但我不知道如何在log4j.xml中设置该设置.另一个选项是另一个smtpappender构造函数,我在使用log4j.xml

中也没有成功

欢呼

推荐答案

引用 api doc doc doc <> api doc <> api doc smtpappender:

可以通过设置esteuatorClass来修改触发条件 具有实施类名称的属性 触发EventEvaluator,设置评估器属性 触发eventevaluator的实例或嵌套触发policy 指定类实现触发eventevaluator的元素.

基本上,我可以使用嵌套的触发policy元素来模仿评估器的行为.额外的优势是,我可以将参数传递给触发policy元素.

我有一个用用案例,每n-消息发送电子邮件摘要.为此,我使用了以下触发器:

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>

希望这会有所帮助!

本文地址:https://www.itbaoku.cn/post/1575162.html

问题描述

My project is using log4j 1.2.17. I have successfully injected my custom "Evaluator" into the SMTPAppender, using setEvaluatorClass :

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

However, I would like to pass some params to my Evaluator, to make it configurable. I would like to use SMTPAppender.setEvaluator, but I cannot figure out how to set that up in log4j.xml. Another option would be the other SMTPAppender constructor, which I have also been unsuccessful in using via log4j.xml

Cheers

推荐答案

Quoting the API doc of SMTPAppender:

The triggering criteria can be modified by setting the evaluatorClass property with the name of a class implementing TriggeringEventEvaluator, setting the evaluator property with an instance of TriggeringEventEvaluator or nesting a triggeringPolicy element where the specified class implements TriggeringEventEvaluator.

Basically, I can use a nested triggeringPolicy element to emulate the behavior of an evaluator. The added advantage is that, I can pass arguments to the triggeringPolicy element.

I had a use case of sending email digest for every n - messages. For that I used the following 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;
    }
}

My log4j.xml configuration, which sends one mail for every two log events is given below:

<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>

Hope this helps!