Log4j.xml注入评估程序 [英] Log4j.xml injecting Evaluator

查看:69
本文介绍了Log4j.xml注入评估程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的项目正在使用log4j 1.2.17.我已经使用

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

但是,我想将一些参数传递给我的评估器,以使其可配置.我想使用其他SMTPAppender构造函数,但我也无法通过log4j.xml使用它

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

欢呼

推荐答案

引用

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

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.

基本上,我可以使用嵌套的triggeringPolicy元素来模拟评估程序的行为.另一个优点是,我可以将参数传递给triggeringPolicy元素.

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.

我有一个用例,每n条消息发送一次电子邮件摘要.为此,我使用了以下TriggeringPolicy:

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

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

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>

希望这会有所帮助!

这篇关于Log4j.xml注入评估程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆