简体   繁体   English

log4j smtp附加程序重写会导致意外行为?

[英]log4j smtp appender overriding gives unexpected behavior?

I have overridden log4j smtp appender for some purpose. 我出于某些目的重写了log4j smtp附加程序。 The problem is if i keep <param name="Threshold" value="INFO"/> Then it would send mails properly. 问题是如果我保留<param name="Threshold" value="INFO"/>那么它将正确发送邮件。 But if i keep <param name="Threshold" value="ERROR"/> Then no mails are sent. 但是,如果我保留<param name="Threshold" value="ERROR"/>则不会发送任何邮件。 What is the problem? 问题是什么? Please find my code. 请找到我的代码。

public class MyAppender extends SMTPAppender{
  @Override
    protected void sendBuffer() {
          //Some code to format email body

    }

}

log4j.xml log4j.xml

<!-- Appenders -->



<appender name="mail" class="com.service.MyAppender">
    <param name="BufferSize" value="2"/>
    <param name="BufferedIO" value="true"/>
    <param name="Threshold" value="ERROR"/>
    <param name="SMTPHost" value="myhost"/>
    <param name="From" value="abc@co.com"/>
    <param name="To" value="def@ld.com"/>
    <param name="Subject" value="Testing Testing"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{2}:%L - %m%n"/>
    </layout>
</appender>


<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="500"/>
    <appender-ref ref="mail"/>
</appender>


<root>
    <level value="ERROR" />
    <appender-ref ref="ASYNC" />
</root>

I looked into SMTPAppender source code and i believe below lines are the problem. 我调查了SMTPAppender源代码,我相信以下SMTPAppender行是问题所在。

if(evaluator.isTriggeringEvent(event)) {
      sendBuffer();
    }

According to log4j documentation , all log events with value lower than Treshold will be filtered out (ie not sent). log4j文档 ,以价值低于 Treshold将被过滤掉所有日志事件(即不发送)。

It's possible that changing Treshold to more restrictive filters out all messages that are logged in your case. 将Treshold更改为更具限制性的过滤器有可能过滤掉案例中记录的所有消息。 Make sure that you actually have events with log level ERROR (or higher - FATAL). 确保您实际上有日志级别为ERROR(或更高级别-FATAL)的事件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM