【问题标题】:Springboot Event LoggingSpring Boot 事件日志
【发布时间】:2018-01-17 11:52:43
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: spring-boot logging message-queue aop


    【解决方案1】:

    好吧,经过一番搜索,我想起了 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");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2018-03-15
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2018-05-18
      相关资源
      最近更新 更多