gpt4 book ai didi

java - Logback 日志记录模式中的进程 ID

转载 作者:太空狗 更新时间:2023-10-29 22:55:14 24 4
gpt4 key购买 nike

我有以下 logback 模式:

<pattern>
{"hostname": "${HOSTNAME}",
"level": "%p",
"method": "%M",
"process_id": "${process}",
"thread_id": "%t",
"timestamp": "%d{Y-M-d}T%d{H:M:S.s}",
"mesg":"%msg"}%n
</pattern>

不幸的是,当日志消息实际生成时,我看到:"process_id": "process_IS_UNDEFINED"

是否有任何自动设置的进程 ID 变量,例如主机名?我很难在 logback 文档中找到此类自动设置变量的记录列表,有人知道更好的文档来源吗?

编辑:我知道映射诊断上下文,但希望有一个不需要此类设置的内置解决方案,就像主机名的工作方式一样。

最佳答案

您可以使用 Mapped Diagnostic Context 解决您的问题:

import org.slf4j.MDC;

public class Main {
public static void main(String... args) {
// put process ID early
MDC.put("process_id",
ManagementFactory.getRuntimeMXBean().getName());
}
}

之后,您只需按如下方式重新定义您的模式:

<pattern>{..., "process_id": "%X{process_id}"}</pattern>

已编辑

您也可以创建自己的编码器和转换器并在 logback.xml 中使用它们:

import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;

public class ExtendedPatternLayoutEncoder extends PatternLayoutEncoder {
@Override
public void start() {
// put your converter
PatternLayout.defaultConverterMap.put(
"process_id", ProcessIdConverter.class.getName());
super.start();
}
}
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

import java.lang.management.ManagementFactory;

public class ProcessIdConverter extends ClassicConverter {
private static final String PROCESS_ID =
ManagementFactory.getRuntimeMXBean().getName();

@Override
public String convert(final ILoggingEvent event) {
// for every logging event return processId from mx bean
// (or better alternative)
return PROCESS_ID;
}
}
<encoder class="some.package.ExtendedPatternLayoutEncoder">
<pattern>{..., "process_id": "%process_id"}</pattern>
</encoder>

完整示例:

    <encoder class="some.package.ExtendedPatternLayoutEncoder">
<pattern>%d{dd.MM.yyyy HH:mm:ss.SSS} PID:%process_id [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>

关于java - Logback 日志记录模式中的进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com