【问题标题】:log4j not sending INFO mailslog4j 不发送 INFO 邮件
【发布时间】:2015-02-11 08:14:56
【问题描述】:

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

这是我的 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);
    }
}

你有什么想法吗? 提前感谢并抱歉格式化..我会在找到方法时更正它

【问题讨论】:

    标签: java email logging smtp log4j


    【解决方案1】:

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

    默认情况下,当出现 ERROR 或更高时,将发送电子邮件消息 附加严重性消息。触发条件可以修改 通过使用类的名称设置 evaluatorClass 属性 实现TriggeringEventEvaluator,设置评估器属性 使用 TriggeringEventEvaluator 的实例或嵌套 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多