console log4j2 kafka: не удалось найти ни одного добавочного файла для регистратора (kafka.utils.Log4jControllerRegistration $) - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь заставить kafka просто войти через консоль, но после установки моего sw я просто вижу эту ошибку.

Мой log4j2. xml:

https://pastebin.com/gqyN1Fsi

мой pom включает следующие зависимости:

[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())
         })
     }
   })
 }

Итак, когда я упаковываю мое приложение и запустить через командную строку 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 на log4j2.properties, но мне так и не удалось зарегистрировать этот регистратор: <</p>

Пожалуйста, предложите мне способ добиться простейшего журнала!

1 Ответ

0 голосов
/ 25 апреля 2020

попробуйте, очень просто

зависимость от maven

        <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
        }
    }

Надеюсь, это даст вам некоторые подсказки. Привет.

...