我在 RHEL 8 服务器上安装了支持 log4j2 ( http://home.apache.org/~dongjin/post/apache-kafka-log4j2-support/ ) 的 Kafka 3.0 预览版。Kafka 和 Zookeeper 作为 systemd 用户服务成功运行。我在 systemd 单元文件中设置了环境变量KAFKA_LOG4J_OPTS="-Dlog4j.configurationFile=file:/home/username/kafka/bin/../config/log4j2.properties"
,以便使用 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
。这不应该定义kafka.logs.dir
文件中使用的环境变量config/log4j2.properties
吗?为什么 Zookeeper 和 Kafka 显然无法访问这个$kafka.logs.dir
环境变量?
只需在文件中为系统变量添加
sys:
前缀即可。那是:kafka.logs.dir
log4j2.properties
${kafka.logs.dir}
${sys:kafka.logs.dir}
免责声明:正如您以我的名义看到的,我编写了这段代码(Apache Kafka 的 log4j2 迁移)并正在维护预览版本。该修复程序将很快发布。对不起,来晚了。
我已按照这些步骤操作,并且能够将 log4j 升级到 logj2,但是,我遇到了未附加的 controller.log 问题。能否请你帮忙?