Springboot事件记录

时间:2018-01-17 11:52:44

标签: spring-boot logging message-queue aop

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

我想知道它是否可以按ID拆分日志,附加到另一个文件。

我在考虑使用方面或自定义appender,其中一个可以为我做这个工作?

感谢。

1 个答案:

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