【问题标题】:Logback Not Sending Email (for Level less than ERROR)Logback 不发送电子邮件(对于小于 ERROR 的级别)
【发布时间】:2017-11-15 19:32:10
【问题描述】:

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

设置:

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

类路径中的 jars:

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

类路径中的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,则电子邮件不会发送...尽管将阈值配置为 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");
    }
}

我确实在控制台日志中得到了这个,但电子邮件永远不会发出。可能有什么问题?

SystemOut     O 13:18:00,012 |-INFO in ch.qos.logback.classic.net.SMTPAppender[email] - SMTPAppender [email] is tracking [1] buffers

【问题讨论】:

    标签: java email logging logback


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      感谢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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-20
        • 2011-03-09
        • 1970-01-01
        • 2011-03-03
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多