Spring Boot 3.2.4升级后日志持续打印Polling for fetches with timeout
解决Spring Boot 3.2.4升级后Spring-Kafka TRACE日志泛滥问题
问题描述
Spring Boot版本从3.1.2升级至3.2.4后,日志中持续输出大量fkaConsumerFactory$ExtendedKafkaConsumer相关的TRACE级别日志,内容多为Polling for fetches with timeout XXX,业务日志被完全淹没,无法在TRACE模式下定位实际业务日志。
示例日志
] [ ] fkaConsumerFactory$ExtendedKafkaConsumer : [Consumer clientId=consumer-**-business-service-5, groupId=**-business-service] Polling for fetches with timeout 721 2024-04-04T00:15:18.320+08:00 TRACE 18596 --- [**-service] [ntainer#1-0-C-1] [ ] fkaConsumerFactory$ExtendedKafkaConsumer : [Consumer clientId=consumer-**-business-service-8, groupId=**-business-service] Polling for fetches with timeout 721 2024-04-04T00:15:18.320+08:00 TRACE 18596 --- [**-service] [ntainer#4-0-C-1] [ ] fkaConsumerFactory$ExtendedKafkaConsumer : [Consumer clientId=consumer-**-business-service-5, groupId=**-business-service] Polling for fetches with timeout 721
解决方案
这并非Spring-Kafka的bug,而是Spring Boot 3.2.x升级后,默认日志配置对Kafka消费者相关组件的日志输出粒度调整导致的。通过以下方式可精准控制日志级别:
1. 修改application.yml配置
在配置文件中指定Kafka消费者相关类的日志级别,将其从TRACE调整为DEBUG或INFO:
logging: level: org.springframework.kafka.core.DefaultKafkaConsumerFactory: DEBUG org.apache.kafka.clients.consumer: DEBUG
若使用properties格式:
logging.level.org.springframework.kafka.core.DefaultKafkaConsumerFactory=DEBUG logging.level.org.apache.kafka.clients.consumer=DEBUG
2. 精准保留业务日志TRACE级别
如果需要保留业务代码的TRACE日志,同时过滤Kafka冗余日志,可单独配置业务包的日志级别:
logging: level: root: INFO com.your.business.package: TRACE # 替换为实际业务代码包路径 org.springframework.kafka.core.DefaultKafkaConsumerFactory: DEBUG
3. 自定义日志配置文件调整
若使用logback.xml或log4j2.xml等自定义日志配置,添加对应日志级别控制:
<!-- logback.xml示例 --> <logger name="org.springframework.kafka.core.DefaultKafkaConsumerFactory" level="DEBUG"/> <logger name="org.apache.kafka.clients.consumer" level="DEBUG"/>
说明
Spring Boot 3.2.x对应的Spring-Kafka版本为3.1.x,该版本优化了消费者内部操作的日志输出逻辑,当全局日志级别设为TRACE时,会默认输出大量轮询细节日志。通过精准配置对应类的日志级别,即可过滤冗余日志,同时保留业务日志的TRACE输出。
内容的提问来源于stack exchange,提问作者Niranjan
相关产品推荐
相关产品推荐

