【问题标题】:Spring boot sending mails with log4j2Spring Boot 使用 log4j2 发送邮件
【发布时间】:2021-01-11 00:36:05
【问题描述】:

我只想使用 log4j2 在我的 Spring Boot 应用程序中通过电子邮件发送具有 ERROR 级别的日志。

在阅读了关于这个的无限教程之后,我无法达到这个。

我在 localhost 中有一个 Docker SMTP 服务器,这是我的配置文件:

pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>
    <dependencies>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- Add Log4j2 Dependency -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <!-- Needed for SMTP appender -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        ...
        ...

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C}{bright,yellow}: %msg%n%throwable" />
        </Console>
        <SMTP name="MailAppender"
            subject="error log"
            to="test@monitor.com"
            from="monitor@monitor.com"
            smtpHost="localhost"
            smtpPort="25"
            bufferSize="10"
            ignoreExceptions="false"
            smtpDebug="true"
            >
            <ThresholdFilter level="ERROR" onMatch="ACCEPT"/>
            <PatternLayout>
                <pattern>%d %p [%C] [%t] %m%n</pattern>
            </PatternLayout>
        </SMTP>
    </Appenders>

    <Loggers>
        <Root level="all">
            <AppenderRef ref="MailAppender" level="debug" />
        </Root>
    </Loggers>
</Configuration>

application.yml

spring:
  mail:
    host: localhost
    port: 25
    auth: false
    properties:
      mail:
        transport:
          protocol: smtp
        smtp:
          auth: false
          host: localhost
          port: 25

使用此配置,log4j2 无法发送任何邮件。显然,log4j2 在启动时正确配置:

2020-09-24 18:31:32,780 restartedMain DEBUG createAppender(Configuration(/XXX/target/classes/log4j2.xml), name="MailAppender", to="test@monitor.com", cc="null", bcc="null", from="monitor@monitor.com", replyTo="null", subject="error log", smtpProtocol="null", smtpHost="localhost", smtpPort="25", smtpUsername="null", smtpPassword="c0323768f8f5dc63ac2d877d8e65de66", smtpDebug="true", bufferSize="10", PatternLayout(%d %p [%C] [%t] %m%n), ThresholdFilter(ERROR), ignoreExceptions="false")

但它无法发送任何电子邮件。

最有趣的是我可以使用spring mail发送邮件(使用JavaMailSender API),配置相同,所以我认为log4j2配置有问题。也许 log4j2 出于任何原因覆盖了邮件配置?

谁能帮帮我?

【问题讨论】:

    标签: spring-boot log4j2


    【解决方案1】:

    好的,我终于解决了。它一直在工作,但它不识别我的应用程序记录器,所以它只适用于 spring 框架日志名称,例如:org.springframework.boot

    我解决了添加引用我的 SMTPAppender 的新记录器的问题:

            <Logger name="com.myapp" level="all" additivity="false">
                <AppenderRef ref="AsyncMailer" level="debug" />
            </Logger>
    

    在 log.error("XXX") 上,它会发送一封带有日志信息的邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多