【发布时间】:2021-11-16 02:44:35
【问题描述】:
我正在尝试更改 Kafka 服务器中的日志记录级别,因为日志过于冗长。我查看了哪些类在 DEBUG 级别记录并获得了日志行数,例如:
kafka.cluster.Partition 1235094
o.apache.kafka.clients.NetworkClient 70375
o.a.k.clients.FetchSessionHandler 69363
kafka.log.LogCleanerManager$ 56400
例如,kafka.cluster.Partition 类记录器的日志行如下所示:
21:41:01.041 [data-plane-kafka-request-handler-4] DEBUG kafka.cluster.Partition - [Partition __transaction_state-43 broker=3] Recorded replica 1 log end offset (LEO) position 0 and log start offset 0.
我尝试通过添加以下行来配置log4j.properties:
log4j.logger.kafka.cluster.Partition=INFO
log4j.additivity.kafka.cluster.Partition=false
我原以为kafka.cluster.Partition 只记录在 INFO 级别。相反,我发现它仍然在 DEBUG 级别记录。
我该如何解决这个问题?
使用 Kafka 3.0.0
根据 cmets 的要求,在下面分享完整的 log4.properties。我相信这与 Kafka 服务器附带的默认版本非常接近。
请注意,我们用于运行任何服务器的公司框架会将 stdout 和 stderr 重定向到单个应用程序日志文件,因此我们指定哪个附加程序可能并不重要。我要做的是过滤哪些行被记录,这不应该取决于使用的附加程序。
kafka.logs.dir=logs
log4j.rootLogger=INFO, 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.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stateChangeAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.stateChangeAppender.File=${kafka.logs.dir}/state-change.log
log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.requestAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.requestAppender.File=${kafka.logs.dir}/kafka-request.log
log4j.appender.requestAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cleanerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.cleanerAppender.File=${kafka.logs.dir}/log-cleaner.log
log4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.controllerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.controllerAppender.File=${kafka.logs.dir}/controller.log
log4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.controllerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
# Turn on all our debugging info
#log4j.logger.kafka.producer.async.DefaultEventHandler=DEBUG, kafkaAppender
#log4j.logger.kafka.client.ClientUtils=DEBUG, kafkaAppender
#log4j.logger.kafka.perf=DEBUG, kafkaAppender
#log4j.logger.kafka.perf.ProducerPerformance$ProducerThread=DEBUG, kafkaAppender
#log4j.logger.org.I0Itec.zkclient.ZkClient=DEBUG
log4j.logger.kafka=INFO, kafkaAppender
log4j.logger.kafka.network.RequestChannel$=WARN, requestAppender
log4j.additivity.kafka.network.RequestChannel$=false
#log4j.logger.kafka.network.Processor=TRACE, requestAppender
#log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender
#log4j.additivity.kafka.server.KafkaApis=false
log4j.logger.kafka.request.logger=WARN, requestAppender
log4j.additivity.kafka.request.logger=false
log4j.logger.kafka.controller=INFO, controllerAppender
log4j.additivity.kafka.controller=false
log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.LogCleaner=false
log4j.logger.state.change.logger=INFO, stateChangeAppender
log4j.additivity.state.change.logger=false
【问题讨论】:
-
你指的是哪个文件?
cleanerAppender写入与主服务器日志不同的文件 -
你能分享你的 log4j.properties 文件吗?
-
@OneCricketeer 我们将 Kafka 服务器进程的 stdout 和 stderr 都重定向到单个应用程序日志文件。 (企业框架,不是我的选择。)不过,无论输出到哪里,我都希望我的规范会过滤正在记录的内容。我可以更改此条目的附加程序名称,但我不希望这会改变任何内容。
-
您添加的行仅适用于
cleanerAppender,但 -
@OneCricketeer 我想当从 C 类调用 log4j 时,会发现 (1) 此消息是否高于 C 类的日志级别? (2) 如果是这样,找到 appender(s) 并写入它们。我会将附加程序更改为标准输出,但我不认为这很重要。
标签: logging apache-kafka log4j