【发布时间】:2022-08-04 03:40:33
【问题描述】:
我正在为 Apache Kafka 使用Confluent Community Docker 映像,并尝试使用基于时间和大小的触发策略和翻转策略来每天翻转 Kafka 日志。
正如docs 中提到的,我已经扩展了图像并通过属性使用 Log4j 配置对其进行了设置。
但是我看到只有org.apache.log4j.RollingFileAppender 的基本配置没有任何每日滚动或政策似乎工作(下面的属性文件中注释掉的配置设置)。
文档上的示例似乎也只使用了非常旧的 Log4j1.x org.apache.log4j.DailyRollingFileAppender,我们知道(以及根据 1.x docs)甚至不应该使用它。我什至不确定 Kafka 是否早先将 apache-log4j-extras 与 log4j1.x 一起打包。
以下是我正在使用的 Dockerfile 和 log4j 属性。你们中有人有运气吗?我在下面做错了什么吗?
Dockerfile:
FROM confluentinc/cp-kafka:7.0.2
COPY log4j.properties.template /etc/confluent/docker/log4j.properties.template
log4j 属性:
log4j.rootLogger={{ env[\"KAFKA_LOG4J_ROOT_LOGLEVEL\"] | default(\'INFO\') }}, stdout, 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.File=/var/log/kafka/kafka-server.log
#log4j.appender.rollingFile.filePattern=/var/log/kafka/kafka-server-%d{yyyy-MM-dd}-%i.log
#log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
#log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
#log4j.appender.rollingFile.MaxFileSize=5KB
#log4j.appender.rollingFile.MaxBackupIndex=15
#log4j.appender.rollingFile.append=true
log4j.appender.rolling.type=RollingFile
log4j.appender.rolling.name=rollingFile
# Below is the default..just making explicit.
log4j.appender.rolling.append=true
log4j.appender.rolling.fileName=/var/log/kafka/kafka-server1.log
log4j.appender.rolling.filePattern=/var/log/kafka/kafka-server1-%d{yyyy-MM-dd}-%i.log
log4j.appender.rolling.layout.type=PatternLayout
log4j.appender.rolling.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
log4j.appender.rolling.policies.type=Policies
log4j.appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
# Below is the default..just making explicit.
log4j.appender.rolling.policies.time.interval=1
log4j.appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
log4j.appender.rolling.policies.size.size=20MB
log4j.appender.rolling.strategy.type=DefaultRolloverStrategy
# Delete all files older than 15 days
log4j.appender.rolling.strategy.delete.type=Delete
log4j.appender.rolling.strategy.delete.basePath=/var/log/kafka/
log4j.appender.rolling.strategy.delete.ifLastModified.type=IfLastModified
log4j.appender.rolling.strategy.delete.ifLastModified.age=15d
{% set loggers = {
\'kafka\': \'INFO\',
\'kafka.network.RequestChannel$\': \'WARN\',
\'kafka.producer.async.DefaultEventHandler\': \'DEBUG\',
\'kafka.request.logger\': \'WARN\',
\'kafka.controller\': \'TRACE\',
\'kafka.log.LogCleaner\': \'INFO\',
\'state.change.logger\': \'TRACE\',
\'kafka.authorizer.logger\': \'WARN\'
} -%}
{% if env[\'KAFKA_LOG4J_LOGGERS\'] %}
{% set loggers = parse_log4j_loggers(env[\'KAFKA_LOG4J_LOGGERS\'], loggers) %}
{% endif %}
{% for logger,loglevel in loggers.items() %}
log4j.logger.{{logger}}={{loglevel}}
{% endfor %}
谢谢
更新(2022 年 8 月 3 日):
这是来自 Confluent 的官方 link,它仍然指向非常古老的 DailyRollingFileAppender 的用法。也许 Confluent 仍然建议使用它,我猜即使 Log4j 建议不要使用它here
谢谢
-
我在上面尝试的是遵循 Log4j docs 中“使用属性配置”部分中的示例
-
请注意,基于索引和文件大小的固定窗口滚动的基本选项已经在顶部属性的上述注释部分中提到过,它的每日滚动与基于时间和大小的触发加上删除不按照 log4j2 文档中提到的示例工作..
标签: apache-kafka log4j log4j2 confluent-platform