如何使用pid作为log4j2 Kafka追加程序的密钥?

时间:2020-02-26 10:06:50

标签: apache-kafka log4j2

我正在尝试将日志发送到Kafka,我希望将进程ID作为日志消息的密钥。

我发现Kafka附加程序中的key支持查找。但是如何像在PatternLayout中一样在pid字段中使用key

<Appenders>
    <Console name="console" target="SYSTEM_OUT">
        <PatternLayout
            pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
    </Console>
    <Kafka name="Kafka" topic="my_log_topic" key="%processId">
        <PatternLayout pattern="[%-5level] %processId  %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        <Property name="bootstrap.servers">127.0.0.1:9092</Property>
    </Kafka>
</Appenders>

我们可以在key字段中使用模式吗?还是有什么方法可以在查询中获取 PID

1 个答案:

答案 0 :(得分:1)

main()中添加以下行可以正常工作。

ProcessIdUtil软件包中找到了

org.apache.logging.log4j.util

System.setProperty("pid", ProcessIdUtil.getProcessId());

然后使用key="${sys:pid}"

<Kafka name="Kafka" topic="my_log_topic" key="${sys:pid}">
    <PatternLayout pattern="[%-5level] %processId  %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
    <Property name="bootstrap.servers">127.0.0.1:9092</Property>
</Kafka>

有没有一种更好的方法,而无需更改代码?