ฉันติดตั้ง Kafka 3.0 รุ่นตัวอย่างพร้อมรองรับ log4j2 (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 unit เพื่อให้ log4j 2.17 ถูกใช้
อย่างไรก็ตาม มีสิ่งหนึ่งที่แปลก: บันทึก log4j ทั้งหมดจะถูกจัดเก็บไว้ในไดเร็กทอรีที่เรียกตามตัวอักษร ${kafka.logs.dir} ในไดเร็กทอรีหลัก ตัวรวบรวมขยะจัดเก็บบันทึกในตำแหน่งบันทึกที่ถูกต้องได้สำเร็จ ~/คาฟคา/บันทึก. ดังนั้นไดเรกทอรี ~/คาฟคา/บันทึก มีไฟล์เช่น kafkaServer-gc.log.0.currentในขณะที่ไดเร็กทอรีแปลกเฮฮา ~/${kafka.logs.dir} ประกอบด้วย เซิร์ฟเวอร์.log, คอนโทรลเลอร์.ล็อกฯลฯ
เมื่อดูกระบวนการของคาฟคาและผู้ดูแลสวนสัตว์ ฉันเห็นว่าทั้งคู่มีข้อโต้แย้ง -Dkafka.logs.dir=/home/username/kafka/bin/../logs. สิ่งนี้ไม่ควรกำหนดตัวแปรสภาพแวดล้อม kafka.logs.dirซึ่งใช้ในไฟล์ config/log4j2.properties? ทำไมผู้ดูแลสวนสัตว์และคาฟคาไม่สามารถเข้าถึงสิ่งนี้ได้ $kafka.logs.dir ตัวแปรสภาพแวดล้อม?