Java logback 日志记录有条件地发送电子邮件

Java logback logging send email conditionally

我使用的是最新版本的 spring boot。

我在各种 类 中有以下代码。

LOGGER.info(" send email : " +  EMAIL); // EMAIL="send_email"

每当使用关键字 "send_email" 生成日志时,我都需要发送电子邮件 我有以下条件可以发送电子邮件

  1. 仅当有 100 条日志消息时才发送电子邮件,即 100 条日志消息发送一封电子邮件 2) 或如果没有 100 条消息,则每 1 小时发送一次电子邮件。

如何使用 Spring 引导实现此目的?

Spring Boot 默认使用 logback。 SLF4J 只是几个日志框架的外观。

如果您正在使用 logback,您可以自定义 SMTPAppender 以传递 evaluator 参数来决定日志消息是否应由 SMTPAppender 处理。

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true">
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <appender name="ERROR_MAILER" class="ch.qos.logback.classic.net.SMTPAppender">
        <evaluator class="app.Evaluator"> </evaluator>
        <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>


    <root level="INFO">
        <appender-ref ref="ERROR_MAILER"/>
    </root>

</configuration>

gt.app.Evaluator

package app;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.boolex.EventEvaluatorBase;

public class Evaluator extends EventEvaluatorBase<ILoggingEvent> {
    @Override
    public boolean evaluate(ILoggingEvent event) throws NullPointerException {
        return event.getMessage().contains("THE_KEYWORD_HERE");
    }
}

参考:ch.qos.logback.core.net.SMTPAppenderBase

的源代码

另请参阅:ch.qos.logback.core.net.SMTPAppenderBase#checkEntryConditions