首页 > 解决方案 > 控制台 log4j2 kafka:找不到记录器的附加程序(kafka.utils.Log4jControllerRegistration$)

问题描述

我试图Kafka简单地logging通过console,但是在安装我的 sw 之后,我一直看到这个错误。

我的log4j2.xml

https://pastebin.com/gqyN1Fsi

我的pom.xml包括这个依赖:

[INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.12.:compile
[INFO] |  +- org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
[INFO] |  \- org.apache.logging.log4j:log4j-core:jar:2.12.1:runtime
[INFO] +- org.apache.logging.log4j:log4j-api-scala_2.12:jar:11.0:compile

我的主要课程是一个非常简单的消费者:

   class Consumer(val brokers: String,
              val groupId: String,
              val topic: String) extends Logging {
 

 val props: Properties = createConsumerConfig(brokers, groupId)
 val consumer: KafkaConsumer[String, User] = new KafkaConsumer[String, User](props)
 var executor: ExecutorService = _

 def shutdown() = {
   if (consumer != null)
     consumer.close()
   if (executor != null)
     executor.shutdown()
 }

 def createConsumerConfig(brokers: String, groupId: String): Properties = {
   val props = new Properties()
   props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers)
   props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId)
   props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true")
   props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000")
   props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "30000")
   props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer")
   props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "kafka.UserDeserializer")
   props
 }


 def run(): Unit = {
   consumer.subscribe(Collections.singletonList(this.topic))

   Executors.newSingleThreadExecutor.execute(() => {
     while (true) {
       val records: ConsumerRecords[String, User] = consumer.poll(ofMillis(1000))
       records
         .forEach(r => {
           
           logger.info("Received message: (" + r.key() + ", " + r.value() + ") at offset " + r.offset())
         })
     }
   })
 }

因此,当package我的应用程序run通过命令行时java -jar,前几行是:

log4j:WARN No appenders could be found for logger (kafka.utils.Log4jControllerRegistration$).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我究竟做错了什么?我尝试了很多依赖版本组合,并尝试将我的更改log4j2.xml为 alog4j2.properties但我从未设法注册它logger:<

请建议我实现最简单的日志的方法!

标签: scalamavenloggingapache-kafkalog4j2

解决方案


试试这个,很简单

maven dependency

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>

在您的代码中导入

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

初始化你的日志

    private void run() {
        // logger
        Logger logger = LoggerFactory.getLogger(ConsumerDemoWithThread.class.getName());

使用日志跟踪流程

       // add a shutdown hook
        Runtime.getRuntime().addShutdownHook(new Thread( () -> {
            logger.info("Caught shutdown hook"); // log
            ((ConsumerRunnable) myConsumerRunnable).shutdown();
            try {
                latch.await();
            } catch(InterruptedException e) {
                e.printStackTrace();
            }
            logger.info("Application has exited"); // log
        }));

        try {
            latch.await();
        } catch(InterruptedException e) {
            logger.error("Application got interrupted", e); // log
        } finally {
            logger.info("Application is closing");  // log
        }
    }

我希望它能给你一些线索。问候。


推荐阅读