我正在尝试将日志发送到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 ?
答案 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>
有没有一种更好的方法,而无需更改代码?