如何在 confluent zookeeper 中覆盖 log4j.properties

How to overwrite log4j.properties in confluent zookeeper

我们面临无法覆盖的问题 log4j.properties。

这是我们的代码 Dockerfile

FROM confluentinc/cp-zookeeper:6.2.0
#RUN chmod 777 /etc/kafka/connect-log4j.properties
USER root
COPY ./log4j.properties /etc/kafka/log4j.properties

log4j.properties


log4j.rootLogger=INFO, ROLLINGFILE

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.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=DEBUG
log4j.appender.ROLLINGFILE.File=/var/log/zookeeper.log

注意:- 我们正在使用这个 confluent zookeeper 'confluentinc/cp-zookeeper:6.2.0'

您不应复制到 log4j 文件中。这会在运行时被此处定义的 Jinja2 模板覆盖 - https://github.com/confluentinc/kafka-images/blob/master/zookeeper/include/etc/confluent/docker/log4j.properties.template

要设置自定义记录器,只需将 ZOOKEEPER_LOG4J_LOGGERS 的环境变量添加到现有图像,而不是创建您自己的

您还应该使用 Docker 日志记录桥而不是强制进程写入容器中的文件

或者,您可以改为复制模板文件

FROM confluentinc/cp-zookeeper:6.2.0
COPY --chown=appuser:appuser ./log4j.properties.template /etc/confluent/docker/log4j.properties.template

哪里

log4j.rootLogger={{ env["ZOOKEEPER_LOG4J_ROOT_LOGLEVEL"] | default('INFO') }}, rollingfile

log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingfile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingfile.File=/var/log/kafka/zookeeper.log
log4j.appender.rollingfile.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.rollingFile.MaxFileSize=10MB
log4j.appender.rollingfile.MaxBackupIndex=1
log4j.appender.rollingFile.append=true

{% if env['ZOOKEEPER_LOG4J_LOGGERS'] %}
{% set loggers = parse_log4j_loggers(env['ZOOKEEPER_LOG4J_LOGGERS']) %}
{% for logger,loglevel in loggers.items() %}
log4j.logger.{{logger}}={{loglevel}}, rollingfile
{% endfor %}
{% endif %}