Die Anwendung Threads stecken bleiben, wenn die Protokolldatei rotiert, verursacht Spitze in Latenz der API Ich bin mit einem Async Appender, nicht sicher, warum während der Rotation der Anwendung Threads sind warten.Dropwizard Logback asynchrone Log-Rotation verursacht Anwendung Threads zu warten
logback.xml
<configuration debug="true">
<property name="async.discardingThreshold" value="0"/>
<property name="async.queueSize" value="500"/>
<property name="log.dir" value="/var/log"/>
<property name="log.pattern" value="%highlight(%-5level) [%date] [%thread] [%X{id}] [%cyan(%logger{0})]: %message%n"/>
<property name="errorLog.pattern" value="%highlight(%-5level) [%date] [%thread] [%X{id}] [%red(%logger{0})]: %message%n"/>
<property name="log.maxHistory" value="200"/>
<property name="log.default.maxFileSize" value="100MB"/>
<property name="log.error.maxFileSize" value="10MB"/>
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/default.log</File>
<Append>true</Append>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.dir}/default.%i.log.gz</fileNamePattern>
<maxIndex>${log.maxHistory}</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>${log.default.maxFileSize}</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%replace(${log.pattern}){'"pin":"\d+"','"pin":"XXXX"'}%n</pattern>
</encoder>
</appender>
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>${async.discardingThreshold}</discardingThreshold>
<queueSize>${async.queueSize}</queueSize>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<OnMismatch>DENY</OnMismatch>
<OnMatch>NEUTRAL</OnMatch>
</filter>
<appender-ref ref="INFO"/>
</appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.dir}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.dir}/error.%i.log.gz</fileNamePattern>
<maxIndex>${log.maxHistory}</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>${log.error.maxFileSize}</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%replace(${errorLog.pattern}){'"pin":"\d+"','"pin":"XXXX"'}%n</pattern>
</encoder>
</appender>
<appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>${async.discardingThreshold}</discardingThreshold>
<queueSize>${async.queueSize}</queueSize>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<appender-ref ref="ERROR"/>
</appender>
<root level="INFO">
<appender-ref ref="ASYNC-ERROR"/>
<appender-ref ref="ASYNC-INFO"/>
</root>