我安装了支持 log4j2 的 Kafka 3.0 预览版(http://home.apache.org/~dongjin/post/apache-kafka-log4j2-support/) 在 RHEL 8 服务器上。Kafka 和 Zookeeper 作为 systemd 用户服务成功运行。我KAFKA_LOG4J_OPTS="-Dlog4j.configurationFile=file:/home/username/kafka/bin/../config/log4j2.properties"
在 systemd 单元文件中设置了环境变量,以便使用 log4j 2.17。
但是,有一件奇怪的事情:所有 log4j 日志都存储在${kafka.logs.dir}
主目录中的目录中。垃圾收集器成功地将日志存储在正确的日志位置~/kafka/logs
。因此目录~/kafka/logs
包含诸如 的文件kafkaServer-gc.log.0.current
,而奇怪的目录~/${kafka.logs.dir}
包含server.log
、controller.log
等。
查看 kafka 和 zookeeper 的进程时,我发现它们都有参数。这难道不应该定义文件中使用的-Dkafka.logs.dir=/home/username/kafka/bin/../logs
环境变量吗?为什么 Zookeeper 和 Kafka 显然无法访问此环境变量?kafka.logs.dir
config/log4j2.properties
$kafka.logs.dir
答案1
sys:
只需在文件中为kafka.logs.dir
系统变量添加前缀即可log4j2.properties
。即:
- 现状:
${kafka.logs.dir}
- 成为:
${sys:kafka.logs.dir}
免责声明:正如您在我的名字中看到的,我编写了此代码(Apache Kafka 的 log4j2 迁移)并正在维护预览版本。修复将很快发布。抱歉迟到了。