Logback AsyncAppender不向底层appender写入日志



在我的应用程序的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中部署war时。

  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>

有没有登录专家能告诉我我在这里做错了什么?是否有任何其他属性的AsyncAppender,可能有助于修复这种行为?

一个同事告诉我在类ch.qos.logback.core.AsyncAppenderBase中使用这个方法。AsyncAppender只能附加一个追加器,并忽略其他追加器。

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() + "]");
}
}

最新更新