【问题标题】:Confluent Docker log4j logger level configurationsConfluent Docker log4j 记录器级别配置
【发布时间】:2021-09-29 22:30:15
【问题描述】:

我正在使用confluentinc/cp-kafka Docker 映像在本地运行 Kafka,并且我正在设置以下日志记录容器环境变量:

KAFKA_LOG4J_ROOT_LOGLEVEL: ERROR
KAFKA_LOG4J_LOGGERS: >-
    org.apache.zookeeper=ERROR,
    org.apache.kafka=ERROR,
    kafka=ERROR,
    kafka.cluster=ERROR,
    kafka.controller=ERROR,
    kafka.coordinator=ERROR,
    kafka.log=ERROR,
    kafka.server=ERROR,
    kafka.zookeeper=ERROR,
    state.change.logger=ERROR

我在 Kafka 日志中看到 Kafka 以以下配置开始:

===> ENV Variables ...
ALLOW_UNSIGNED=false
COMPONENT=kafka
CONFLUENT_DEB_VERSION=1
CONFLUENT_PLATFORM_LABEL=
CONFLUENT_VERSION=5.4.1
...
KAFKA_LOG4J_LOGGERS=org.apache.zookeeper=ERROR, org.apache.kafka=ERROR, kafka=ERROR, kafka.cluster=ERROR, kafka.controller=ERROR, kafka.coordinator=ERROR, kafka.log=ERROR, kafka.server=ERROR, kafka.zookeeper=ERROR, state.change.logger=ERROR
KAFKA_LOG4J_ROOT_LOGLEVEL=ERROR
...

我仍然在日志中看到INFOTRACE 日志级别。例如:

[2020-03-26 16:22:12,838] INFO [Controller id=1001] Ready to serve as the new controller with epoch 1 (kafka.controller.KafkaController)
[2020-03-26 16:22:12,848] INFO [Controller id=1001] Partitions undergoing preferred replica election:  (kafka.controller.KafkaController)
[2020-03-26 16:22:12,849] INFO [Controller id=1001] Partitions that completed preferred replica election:  (kafka.controller.KafkaController)
[2020-03-26 16:22:12,855] INFO [Controller id=1001] Skipping preferred replica election for partitions due to topic deletion:  (kafka.controller.KafkaController)

如何才能真正停用低于某个级别的日志?在上面的例子中,我真的只想要ERROR 日志。

  • 上面的方法就是Confluent documentation中描述的方法。
  • Apache Kafka source code 列出了我无法使用 KAFKA_LOG4J_LOGGERS Docker 环境变量影响的各种记录器。

【问题讨论】:

  • 您看到INFO 级别的日志仅用于控制器吗?
  • @GiorgosMyrianthous 不仅仅是控制器。同时我发现了这个问题。请参阅我发布的答案。

标签: docker logging apache-kafka log4j


【解决方案1】:

我去解决了Dockerfile 的问题并检查了Kafka 容器。此行为的原因是 YAML 多行字符串折叠。

因此提供的环境变量(使用 YAML 多行值)在运行时:

KAFKA_LOG4J_LOGGERS=org.apache.zookeeper=ERROR, org.apache.kafka=ERROR, kafka=ERROR, kafka.cluster=ERROR, kafka.controller=ERROR, kafka.coordinator=ERROR, kafka.log=ERROR, kafka.server=ERROR, kafka.zookeeper=ERROR, state.change.logger=ERROR

而不是(中间没有空格):

KAFKA_LOG4J_LOGGERS=org.apache.zookeeper=ERROR,org.apache.kafka=ERROR, kafka=ERROR, kafka.cluster=ERROR,kafka.controller=ERROR, kafka.coordinator=ERROR,kafka.log=ERROR,kafka.server=ERROR,kafka.zookeeper=ERROR,state.change.logger=ERROR

这在生成的 /etc/kafka/log4j.properties 文件中的容器内可见:

log4j.rootLogger=ERROR, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n


log4j.logger.kafka.authorizer.logger=WARN
log4j.logger.kafka.cluster=ERROR
log4j.logger.kafka.producer.async.DefaultEventHandler=DEBUG
log4j.logger.kafka.zookeeper=ERROR
log4j.logger.org.apache.kafka=ERROR
log4j.logger.kafka.coordinator=ERROR
log4j.logger.org.apache.zookeeper=ERROR
log4j.logger.kafka.log.LogCleaner=INFO
log4j.logger.kafka.controller=ERROR
log4j.logger.kafka=INFO
log4j.logger.kafka.log=ERROR
log4j.logger.state.change.logger=ERROR
log4j.logger.kafka=ERROR
log4j.logger.kafka.server=ERROR
log4j.logger.kafka.controller=TRACE
log4j.logger.kafka.network.RequestChannel$=WARN
log4j.logger.kafka.request.logger=WARN
log4j.logger.state.change.logger=TRACE

如果您确实需要将长行拆分为 YAML 多行值,则必须使用 this YAML syntax

代码中的更多提示:

  • here 是运行 confluent 容器时生成 log4j.properties 文件的位置。
  • these 是 Kafka 将使用的默认日志级别。
  • these应该是Kafka支持的所有logger

【讨论】:

  • 注意:空格很重要。 log4j.logger. kafka.log=ERROR 可能无法加载
  • 请注意,在没有空格的单行示例中,您实际上仍然有空格。应该是:KAFKA_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.apache.kafka=ERROR,kafka=ERROR,kafka.cluster=ERROR,kafka.controller=ERROR,kafka.coordinator=ERROR,kafka.log=ERROR, kafka.server=错误,kafka.zookeeper=错误,state.change.logger=错误
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多