log4j没有发送INFO邮件

时间:2014-12-12 15:19:33

标签: java email logging smtp log4j

我有一个问题:我有以下lo4j.xml和类但是我没有找到如何配置log4j以便在类中有INFO日志时发送邮件(ERROR邮件工作)。

这是我的log4j.xml:

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="info"/>
        <param name="LevelMax" value="fatal"/>
    </filter>
</appender>

<appender name="mailAppender" class="org.apache.log4j.net.SMTPAppender">
    <param name="BufferSize" value="1" />
    <param name="SMTPHost" value="xxx" />
    <param name="SMTPPort" value="25" />
    <param name="SMTPUsername" value="xxx@xxx.fr" />
    <param name="SMTPPassword" value="xxx" />
    <param name="From" value="yyyy@yyyy.fr" />
    <param name="To" value="zzzz@zzzz.fr" />
    <param name="Subject" value="[Projet] - Message" />
    <param name="Threshold" value="info" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="info" />
        <param name="LevelMax" value="fatal" />
    </filter>
</appender>

<logger name="g.integration.common.Mailer">
    <appender-ref ref="mailAppender" />
</logger>

<root>
    <appender-ref ref="STDOUT" />
</root>

上课:

public class Mailer {

    private static final Logger logger = Logger.getLogger(Mailer.class);
    private static final String MAIL_INFO_MESSAGE = "Bonjour,\nLe traitement suivant s'est déroulé avec succès :\n";
    private static final String MAIL_ERROR_MESSAGE = "Bonjour,\nUne erreur est survenue lors du traitement MGAS"
            + "\nVoici la trace de l'erreur relevée :\n\n";

    /**
     * Envoie un mail d'information
     * 
     * @param mailString
     */
    public void logSuccessMail(final String mailString) {
        logger.info(MAIL_INFO_MESSAGE + mailString);
    }

    /**
     * Envoie un mail d'erreur
     * 
     * @param mailString
     */
    public void logErrorMail(final String mailString) {
        logger.error(MAIL_ERROR_MESSAGE + mailString);
    }
}
你知道吗? 在此先感谢并抱歉格式化..当我找到

时,我会纠正它

1 个答案:

答案 0 :(得分:0)

SMTPAppender按设计仅记录ERROR及以上消息。

  

默认情况下,当ERROR或更高版本时,将发送电子邮件   附加严重性消息。可以修改触发条件   通过使用类的名称设置evaluateatorClass属性   实现TriggeringEventEvaluator,设置evaluateator属性   使用TriggeringEventEvaluator的实例或嵌套a   指定类实现的triggeringPolicy元素   TriggeringEventEvaluator。

设置阈值不起作用。您需要具有TriggeringEventEvaluator的自定义实现。以下代码有效。

<appender name="mailAppender" class="org.apache.log4j.net.SMTPAppender">
    <param name="BufferSize" value="1" />
    <param name="SMTPHost" value="xxx" />
    <param name="SMTPPort" value="25" />
    <param name="SMTPUsername" value="xxx@xxx.fr" />
    <param name="SMTPPassword" value="xxx" />
    <param name="From" value="yyyy@yyyy.fr" />
    <param name="To" value="zzzz@zzzz.fr" />
    <param name="Subject" value="[Projet] - Message" />
    <param name="evaluatorClass" value="myapp.EmailTriggerEvaluator"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
    </layout>        
</appender>


public class EmailTriggerEvaluator implements TriggeringEventEvaluator {
    @Override
    public boolean isTriggeringEvent(LoggingEvent event) {
        return event.getLevel().isGreaterOrEqual(Level.INFO);
    }
}
相关问题