【问题标题】:Sending logs to email using Spring boot使用 Spring Boot 将日志发送到电子邮件
【发布时间】:2015-09-22 15:25:40
【问题描述】:

我正在尝试弄清楚如何配置我的 Spring Boot 项目,将日志消息发送到电子邮件,但还没有成功。没有发送电子邮件,没有可见的错误。

我的 logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <appender name="mail" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>email-smtp.eu-west-1.amazonaws.com</smtpHost>
        <from>dev@example.com</from>
        <to>dev@example.com</to>
        <subject>Something went wrong</subject>
        <layout class="ch.qos.logback.classic.html.HTMLLayout"/>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <root level="INFO">
        <appender-ref ref="mail"/>
    </root>
</configuration>

我的应用程序.yaml:

spring:
  mail:
    host: email-smtp.eu-west-1.amazonaws.com
    protocol: smtps
    username: ***
    password: ***
    port: 465
    properties:
      mail:
        smtp:
          auth: true
          socketFactory:
            port: 465
            class: javax.net.ssl.SSLSocketFactory
            fallback: false
          ssl.enable: true
        transport.protocol: smtps

我做错了什么?在 Spring Boot 中是否有不同的方式将日志消息发送到电子邮件?

【问题讨论】:

  • 我认为您正在尝试配置不同的东西。一方面,你有 logback appender,它需要一些凭据来登录邮件服务器。另一边,你在配置spring邮件模块,发送邮件是有效的,但是logback对此一无所知......
  • 我建议登录到本地 MTA,然后中继到 SES
  • @NeilMcGuigan localhost MTA 中继不是一个选项,因为该应用程序将在 AWS Elastic Beanstalk 上运行,默认情况下没有本地 MTA。 (我知道,有办法……)
  • @XtremeBiker 就是这样,谢谢,我必须将凭据添加到 logback.xml。如果您将评论转换为答案,我很乐意接受。
  • @endrec 完成。很高兴对您有所帮助!

标签: spring email spring-boot logback amazon-ses


【解决方案1】:

您在 application.yaml 中配置 Spring 邮件模块,而不是为 logback appender 提供必要的数据。您可能需要凭据以在 SMTP 服务器中进行身份验证:

<appender name="mail" class="ch.qos.logback.classic.net.SMTPAppender">
    <smtpHost>email-smtp.eu-west-1.amazonaws.com</smtpHost>
    <username>user</username>
    <password>user</password>
    <from>dev@example.com</from>
    <to>dev@example.com</to>
    <subject>Something went wrong</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
</appender>

另请参阅:

【讨论】:

    【解决方案2】:

    请使用这个(PS:不要尝试将属性从属性文件加载到 logback,因为它在启动时不可见,如果仍希望设置属性,则将它们作为 JVM 参数提供,因为它对 logback 可见):-

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml" />
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
        <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
        <appender name="dbgMailer" class="ch.qos.logback.classic.net.SMTPAppender">
          <smtpHost>email-smtp.eu-west-1.amazonaws.com</smtpHost>
          <smtpPort>25</smtpPort>
          <from>dev@example.com</from>
          <to>dev@example.com</to>
          <subjectStr>Something went wrong</subjectStr>
          <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
          <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
              <level>DEBUG</level>
          </filter>
      </appender>
        <root level="DEBUG">
            <appender-ref ref="dbgMailer" />
        </root>
    </configuration>
    

    【讨论】:

    • 这个答案具有误导性,因为现在您可以添加 并且您的应用程序属性将可见
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多