【问题标题】:Logback in Spring-boot application, inits the same appender twiceSpring-boot应用程序中的Logback,两次初始化同一个appender
【发布时间】:2019-07-29 12:16:14
【问题描述】:

我的 logback 有两个附加程序,一个控制台和一个电子邮件附加程序,它从我的自定义 SMPTAppender 扩展...我的记录器 logger.error("My error"); 在我的自定义 SMTPAppender 中触发了 x 分钟后发送的电子邮件,问题是,调度程序不会等待延迟,因为两个已初始化。

这发生了两次:

将名为 [EMAIL] 的附加程序附加到 Logger[ROOT]

这就是为什么 IMO 还创建了两个调度程序(startmethod 被调用两次)

Logback.xml(问题应该出在哪里):

<configuration debug="true">

 Logging per console and per email
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            sets the format of the output
            %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
        </Pattern>
    </layout>
</appender>

<appender name="EMAIL" class="com.konverto.phonebillasaj.appenders.ScheduledSMTPAppender">
    <subject>TESTING: %logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout" />

    <smtpHost>smtp.xxx.net</smtpHost>
    <smtpPort>587</smtpPort>
    <STARTTLS>true</STARTTLS>
    <username>xxxx@xxx.net</username>
    <password>xxxx</password>
    <to>xxx@xxx.net</to>
    <from>xxx@xxx.net</from>
    <maxMessages>10</maxMessages>

    for testing , comment in production, default 256
    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
        Send just one log entry per email, ready for a lot of emails if you put one.
        <bufferSize>1</bufferSize>
    </cyclicBufferTracker>

    for testing , comment in production, default asynchronousSending = true
    <asynchronousSending>false</asynchronousSending>
</appender>


<logger name="com.konverto.phonebillasaj" level="error" additivity="false">
    <appender-ref ref="EMAIL"/>
    <appender-ref ref="CONSOLE" />
</logger>

<root level="error">
    <appender-ref ref="EMAIL" />
    <appender-ref ref="CONSOLE" />
</root>

【问题讨论】:

    标签: spring-boot logback smtpappender


    【解决方案1】:

    添加两个日志附加程序时,我也遇到了同样的问题。但能够通过删除控制台附加程序来解决它。

    我的初始根配置如下所示

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ROLLING_FILE" />
    </root>
    

    在这种情况下,我在控制台中得到了重复的日志,但在文件日志中没有。看起来你在记录器中设置的任何附加程序都写入控制台,不管是什么(在 IDE 中运行或作为 .jar 运行时)。所以我删除了控制台附加程序,只保留了我的文件附加程序。如下所示。

    <root level="info">
        <!-- <appender-ref ref="CONSOLE" /> -->
        <appender-ref ref="ROLLING_FILE" />
    </root>
    

    新的注销如下

    我相信同样可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2015-03-06
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 2018-11-13
      • 2022-09-23
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多