Springboot 事件记录

Springboot Event Logging

我有一个以固定速率读取队列的计划任务。 来自队列的每条消息都有一个 ID。

我想知道是否可以按 ID 拆分日志,附加到不同的文件。

我在考虑使用方面或自定义附加程序,其中之一可以为我完成这项工作吗?

谢谢。

好吧,经过一番搜索,我想起了 MDC(映射诊断上下文),它可以做我想做的事,几乎没有变通办法。

我只需要像这样向 logback-spring.xml 添加一个 SiftingAppender:

<?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");
    }
}