Logback不发送电子邮件(级别低于ERROR)

时间:2017-11-15 19:32:10

标签: java email logging logback

我正在使用slf4j和logback来登录我的java Web应用程序。我需要通过电子邮件发送特定类(以下示例中的MyClass)的信息日志。我在logback中配置了一个电子邮件appender。其余部分可以放在根记录器设置的任何位置。但是我的当前设置不会发送电子邮件。见下文......

设置:

以下是有关jar版本及其他设置的相关信息:

类路径中的jar:

activation-1.1.jar
jcl-over-slf4j-1.7.25.jar
logback-classic-1.2.3.jar
logback-core-1.2.3.jar
logback-ext-spring-0.1.4.jar
logstash-logback-encoder-4.11.jar
mail-1.4.jar
slf4j-api-1.7.25.jar
来自classpath的

logback.xml:

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%thread] %-5level %logger{5}:%L - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="email" class="ch.qos.logback.classic.net.SMTPAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>

        <smtpHost>smtp.server</smtpHost>
        <to>code4kix@email.com</to>
        <from>do-not-reply@email.com</from>
        <subject>code4kix - ${HOSTNAME}: %logger{20} - %m</subject>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d [%thread] %-5level %logger{5}:%L - %msg%n</pattern>
        </layout>
<!--        <STARTTLS>true</STARTTLS> -->
<!--        <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> -->
<!--            <bufferSize>1</bufferSize> -->
<!--        </cyclicBufferTracker> -->
<!--        <asynchronousSending>false</asynchronousSending> -->
    </appender>

    <root level="error">
        <appender-ref ref="console" />
    </root>

    <logger name="mypackage.MyClass" level="info" additivity="true">
      <appender-ref ref="email"/>
    </logger>

问题:

如果我在MyClass.java中有logger.error语句,那么电子邮件似乎没有问题,但是如果他们只有logger.info,那么电子邮件不会消失......尽管将阈值配置为{{1} }!

info

我确实在控制台日志中得到了这个,但电子邮件永远不会消失。什么可能是错的?

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClass
{
    private static Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void myMethod()
    {
        logger.error("using this sends the email out");
        logger.info("using this doesn't");
    }
}

2 个答案:

答案 0 :(得分:2)

从我最近阅读的logback看起来好像只有在ERROR下才会发送一封电子邮件。 Chapter 4: Appenders

答案 1 :(得分:0)

感谢Elijah让我指向正确的方向。正如SMTP Appender中的文档中所述:

  

默认情况下,电子邮件传输由日志记录事件触发   等级错误

有多种方法可以解决这个问题。对我来说最简单的方法是实现我自己的EventEvaluator,并在smtp appender配置中使用它(如下所示)。或者,您可以使用标记来探索解决此问题。

public class OnInfoEvaluator extends EventEvaluatorBase<ILoggingEvent> {

    @Override
    public boolean evaluate(ILoggingEvent loggingEvent) throws NullPointerException, EvaluationException {
        if(loggingEvent.getLevel().toInt() >= Level.INFO_INT)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

在配置中:

<appender name="email" class="ch.qos.logback.classic.net.SMTPAppender">
    <evaluator class="mypackage.OnInfoEvaluator" />
    ...
</appender>