编程语言
首页 > 编程语言> > java – 为什么Apache Kafka使用者不使用Log4j2根记录器?

java – 为什么Apache Kafka使用者不使用Log4j2根记录器?

作者:互联网

我有这个配置:

的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消费者启动时,我会看到这一行:

2018年8月20日下午11:03:37 org.apache.kafka.common.utils.LogContext $KafkaLogger info

任何帮助赞赏!

解决方法:

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配置.

标签:kafka-consumer-api,java,apache-kafka,log4j2,slf4j
来源: https://codeday.me/bug/20190828/1746476.html