【问题标题】:Why doesn't the Apache Kafka consumer use the Log4j2 root logger?为什么 Apache Kafka 消费者不使用 Log4j2 根记录器?
【发布时间】:2018-08-21 16:42:34
【问题描述】:

我有这个配置:

pom.xml

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.11.1</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.11.1</version>
</dependency>

<dependency>
  <groupId>org.apache.kafka</groupId>
  <artifactId>kafka-clients</artifactId>
  <version>1.0.1</version>
</dependency>

资源/log4j2.properties

name=PropertiesConfig
appenders = console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
rootLogger.level = ERROR
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

当我使用 org.apache.kafka.clients.consumer.KafkaConsumer 启动我的 Kafka 消费者时,它在 INFO 级别进行记录。我使用LogManager.getLogger(name) 创建的任何新记录器都支持ERROR 级别的配置和日志,所以我知道log4j2.properties 文件正在被加载和使用。卡夫卡似乎忽略了它。在日志中,当 Kafka 消费者启动时,我多次看到这一行:

Aug 20, 2018 11:03:37 PM org.apache.kafka.common.utils.LogContext$KafkaLogger info

任何帮助表示赞赏!

【问题讨论】:

    标签: java apache-kafka slf4j log4j2 kafka-consumer-api


    【解决方案1】:

    Kafka 通过 SLF4J 记录日志。如果要使用Log4j2,则必须配置两者协同工作(通过添加Log4j2提供的SLF4J实现):

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.11.1</version>
    </dependency>
    

    如果没有这个,SLF4J 的日志输出将使用其他一些后端(确保删除那个,您的类路径中不应有任何其他 slf4j-impl)并忽略您的 Log4j2 配置。

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多