Logback通过AsyncAppender包装同步Appender实现异步日志,其核心是将日志事件提交至后台队列由独立线程消费;需先定义同步Appender(如RollingFileAppender),再用AsyncAppender引用,并绑定到root或指定logger。

Logback 本身不直接提供异步日志的 <appender></appender> 标签,而是通过 AsyncAppender 包装同步 Appender 来实现异步写入。核心思路是:把日志事件提交给一个后台线程队列,由独立线程消费并委托给目标 Appender(如 FileAppender、ConsoleAppender)处理。
AsyncAppender 是一个“装饰器”型 Appender,它不负责实际输出,只负责异步调度。你需要先定义一个同步 Appender(比如输出到文件),再用 AsyncAppender 引用它:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<p><!-- 异步包装 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
<!-- 可选:队列大小,默认256 -->
<queueSize>1024</queueSize>
<!-- 可选:丢弃超过队列容量的日志?默认true -->
<discardingThreshold>0</discardingThreshold>
<!-- 可选:是否包含调用者信息(如行号),异步下默认false以提升性能 -->
<includeCallerData>false</includeCallerData>
</appender>配置好 AsyncAppender 后,需将其关联到 logger,才能生效:
<root level="INFO"> <appender-ref ref="ASYNC_FILE"/> </root>
<logger name="com.example.service" level="DEBUG" additivity="false"> <appender-ref ref="ASYNC_FILE"/> </logger>
AsyncAppender 的行为受几个关键参数影响,合理设置可避免丢日志或内存溢出:
AsyncAppender 虽提升性能,但引入了新约束:
includeCallerData 且日志级别含 ERROR,否则不会自动补全以上就是如何用Logback的XML配置实现异步日志的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号