【问题标题】:Does confluent kafka (cp-kafka) support Log4j RollingFileAppender with Time/Size Based Triggering Policy & Rollover Strategy? Doesn't seem to workconfluent kafka (cp-kafka) 是否支持具有基于时间/大小的触发策略和翻转策略的 Log4j RollingFileAppender?似乎不起作用
【发布时间】: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


【解决方案1】:

我正在使用它,它就像一个冠军。您甚至可以使用您所追求的任何特定格式更新 ConversionPattern。

# DEFAULT: console appender only
log4j.rootLogger=INFO, CONSOLE, ROLLINGFILE


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

log4j.appender.ROLLINGFILE.Threshold=INFO
log4j.appender.ROLLINGFILE=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.ROLLINGFILE.rollingPolicy=org.apache.log4j.rolling.FixedWindowRollingPolicy
log4j.appender.ROLLINGFILE.rollingPolicy.maxIndex=10
log4j.appender.ROLLINGFILE.rollingPolicy.ActiveFileName=/var/log/kafka/kafka-server.log
log4j.appender.ROLLINGFILE.rollingPolicy.FileNamePattern=/var/log/kafka/kafka-server.%i.log
log4j.appender.ROLLINGFILE.triggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.ROLLINGFILE.triggeringPolicy.MaxFileSize=10485760
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n

log4j.logger.org.apache.zookeeper=ERROR
log4j.logger.org.apache.kafka.connect.runtime=ERROR
log4j.logger.org.reflections=ERROR
log4j.logger.org.apache.kafka.common.config.AbstractConfig=ERROR
log4j.logger.org.apache.kafka.connect.storage=ERROR
log4j.logger.org.apache.kafka.common.config=ERROR

【讨论】:

  • 谢谢@ChristDist。这看起来类似于旧的配置方法(注释掉的版本)。固定窗口滚动文件大小已经适用于我注释掉的版本,虽然你的更好,但问题是每天滚动文件大小(使用 TimeBasedTriggeringPolicy 和 SizeBasedTriggeringPolicy)以及删除旧文件和删除策略我试过在我上面的例子中。
  • 我尝试的是遵循 Log4j docs 中“使用属性配置”部分中的示例
猜你喜欢
  • 1970-01-01
  • 2013-10-18
  • 2018-03-17
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多