2011-05-31 103 views
1

此接口由log4j中的SMTPAppender类使用。 它返回一个状态(如果触发电子邮件警报与否)扩展TriggeringEventEvaluator(log4j)并在配置中为其提供属性

的问题是, 我想somefunctionality添加到TriggeringEventEvaluator的方法。 这需要一些额外的字段来指定TriggeringEventEvaluator的配置。

如何将这些字段从log4j配置传递到TriggeringEventEvaluator。 我知道log4j调用字段的setter方法,但如何指定字段TriggeringEventEvaluator

+0

我觉得这里这个答案将帮助:http://stackoverflow.com/questions/34931650/log4j- xml注入评估/ 34989591#34989591 – KKishore 2016-01-25 11:37:31

回答

1

定义SMTPAppender元素内的TriggeringPolicy元素。 TriggeringPolicy元素的类将是org.apache.log4j.rolling.FilterBasedTriggeringPolicy。

在TriggeringPolicy元素中,定义一个'filter'元素,其类是org.apache.log4j.filter.ExpressionFilter。

然后,您可以使用任何您想要的事件字段(并且使用'like'关键字支持正则表达式支持)来过滤事件。电锯的开发快照对表达式语法一个很好的教程:http://people.apache.org/~sdeboy

例子:

<appender name="mail" class="org.apache.log4j.net.SMTPAppender"> 
    <param name="from" value="[EMAIL PROTECTED]" /> 
    <param name="to" value="[EMAIL PROTECTED]" /> 
    <param name="subject" value="Test message" /> 
    <param name="SMTPHost" value="localhost"/> 
    <param name="sendOnClose" value="true"/> 
    <triggeringPolicy class="org.apache.log4j.rolling.FilterBasedTriggeringPolicy"> 
    <filter class="org.apache.log4j.filter.ExpressionFilter"> 
     <param name="Expression" value="(LOGGER ~= class1 &amp;&amp; MSG ~= test1) || (logger ~= class2 &amp;&amp; MSG like 'TEST2')"/> 
    </filter> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%-5p %c{2} - %m%n"/> 
    </layout> 
</appender> 
+0

如何指定这些属性值格式? – user777486 2011-06-01 12:55:51

+0

可以解释多一点.. 我想要完成的是,我想设置一个可以在一段时间内发送的最大电子邮件限制。因此,应在log4j config中指定最大电子邮件限制和时间范围。触发评估者应该根据这些参数决定是否可以发送邮件。如果超过了发送邮件的限制,triggeringevaluator应该返回false。 是类似的行为可以通过触发策略来完成,请多帮忙解释一下。 – user777486 2011-06-01 13:08:50

+0

触发策略不能设置属性文件格式我相信,只是XML格式。 您可以编写一个定制的TriggeringPolicy(实现TriggeringEventEvaluator),它可以跟踪isTriggeringEvent实现中您想要的任何内容,并在适当时(基于时间,日志记录事件计数等)返回true。 – Scott 2011-06-02 17:24:51