Confluent Docker log4j конфигурации уровня логгера - PullRequest
1 голос
/ 26 марта 2020

Я запускаю Kafka локально, используя образ confluentinc/cp-kafka Docker, и я устанавливаю следующие переменные среды контейнера журналирования:

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

Тем не менее, в журналах я вижу дальнейшие уровни журналов INFO и TRACE. Например:

[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 документации .
  • И Apache Кафка исходный код перечисляет все виды регистраторов, на которые я не мог повлиять, используя переменную окружения KAFKA_LOG4J_LOGGERS Docker.

1 Ответ

1 голос
/ 26 марта 2020

Я пошел и обнаружил неисправность Dockerfile и осмотрел контейнер Кафки. Причиной такого поведения было сложение многострочных строк 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, вам придется использовать этот синтаксис YAML .

Дополнительные подсказки из кода:

  • здесь - это где файл log4j.properties генерируется при запуске сливного контейнера.
  • эти - это уровни журнала по умолчанию, с которых Kafka будет начинаться.
  • эти должны быть всеми регистраторы, поддерживаемые Kafka
...