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");
}
}
我有一个以固定速率读取队列的计划任务。 来自队列的每条消息都有一个 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");
}
}