使用 Spring 引导将日志发送到电子邮件

Sending logs to email using Spring boot

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

我的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>

我的application.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 启动时是否有其他方式将日志消息发送到电子邮件?

请使用这个(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>

您正在 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>

另请参阅: