【问题标题】:Logback AsyncAppender not writing logs to underlying appendersLogback AsyncAppender 未将日志写入底层附加程序
【发布时间】:2021-02-18 11:53:39
【问题描述】:

在我的应用程序的 logback.xml 中,我定义了一个 AsyncAppender,如下所示。

<appender name="socketAppender" class="ch.qos.logback.classic.net.SocketAppender">
    <param name="RemoteHost" value="127.0.0.1" />
    <param name="Port" value="15000" />
    <param name="ReconnectionDelay" value="10" />
    <param name="Threshold" value="DEBUG" />
</appender>
<appender name="appLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/myApp.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/myApp.%d{yyyyMMdd.HH}00.log</fileNamePattern>
    </rollingPolicy>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%c{0}] %m%n]</pattern>
    </encoder>
</appender>
<appender name="AsyncLog" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="appLog" />
    <appender-ref ref="socketAppender" />
</appender>

当我在 Windows 10 上的 Tomcat 中部署战争时。

  1. 侦听端口 15000 的日志服务器未接收日志。
  2. 所以我将 socketAppender 向上移动到第一个位置,如下所示。
<appender name="AsyncLog" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="socketAppender" />
    <appender-ref ref="appLog" />
</appender>

随着这个更改日志服务器开始接收日志,但日志文件停止写入/追加。 3)我还尝试在appender上设置queueSize和discardingThreshold属性,但无济于事。

<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>

能否请任何 logback 专家告诉我我在这里做错了什么? AsyncAppender 是否还有其他属性可以帮助解决此问题?

【问题讨论】:

  • Tomcat 版本为 9.0.30。

标签: logback logback-classic


【解决方案1】:

一位同事在ch.qos.logback.core.AsyncAppenderBase 类中向我指出了这种方法。 AsyncAppender 只能附加一个 appender,而忽略除此之外添加的任何 appender。

public void addAppender(Appender<E> newAppender) {
        if (appenderCount == 0) {
            appenderCount++;
            addInfo("Attaching appender named [" + newAppender.getName() + "] to AsyncAppender.");
            aai.addAppender(newAppender);
        } else {
            addWarn("One and only one appender may be attached to AsyncAppender.");
            addWarn("Ignoring additional appender named [" + newAppender.getName() + "]");
        }
    }

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多