Kafka 将 log4j 日志存储在名为 ${kafka.logs.dir} 的目录中

Kafka 将 log4j 日志存储在名为 ${kafka.logs.dir} 的目录中

我安装了支持 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.logcontroller.log等。

查看 kafka 和 zookeeper 的进程时,我发现它们都有参数。这难道不应该定义文件中使用的-Dkafka.logs.dir=/home/username/kafka/bin/../logs环境变量吗?为什么 Zookeeper 和 Kafka 显然无法访问此环境变量?kafka.logs.dirconfig/log4j2.properties$kafka.logs.dir

答案1

sys:只需在文件中为kafka.logs.dir系统变量添加前缀即可log4j2.properties。即:

  • 现状:${kafka.logs.dir}
  • 成为:${sys:kafka.logs.dir}

免责声明:正如您在我的名字中看到的,我编写了此代码(Apache Kafka 的 log4j2 迁移)并正在维护预览版本。修复将很快发布。抱歉迟到了。

相关内容