我有一个固定速率的计划任务,它读取队列。 来自队列的每条消息都有一个ID。
我想知道它是否可以按ID拆分日志,附加到另一个文件。
我在考虑使用方面或自定义appender,其中一个可以为我做这个工作?
感谢。
答案 0 :(得分:0)
嗯,经过一些搜索后,我记得MDC(Mapped Diagnostic Context)可以做我想要的几乎没有解决方法。
我只需要将一个SiftingAppender添加到logback-spring.xml中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>checkoutId</key>
<defaultValue>system</defaultValue>
</discriminator>
<sift>
<appender name="${checkoutId}" class="ch.qos.logback.core.FileAppender">
<file>${checkoutId}.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss:SSS} | %-5level | %thread | %logger{20} | %msg%n%rEx</pattern>
</layout>
</appender>
</sift>
</appender>
<root level="INFO">
<appender-ref ref="SIFT" />
</root>
</configuration>
比我那样打电话:
@Scheduled(initialDelayString = "${consumeStart:10000}", fixedRateString = "${consumeRate:5000}")
private void task() {
try {
val message = queue.get(timeout);
if (message != null) {
MDC.put("checkoutId", message.toString());
. . .
}
} finally {
MDC.remove("checkoutId");
}
}