Logback 本身不直接支持将日志写入 Kafka,需依赖第三方 appender;最常用的是 com.github.danielwegener 提供的 logback-kafka-appender,通过添加对应 Maven 依赖、配置 KafkaAppender 并指定 topic、keyingStrategy、deliveryStrategy 及 producerConfig 等参数,即可实现日志异步发送至 Kafka,支持结构化 JSON 格式输出。

Logback 本身不直接支持将日志写入 Kafka,需要借助第三方 appender 实现。最常用、维护活跃的是 logback-kafka-appender(由 com.github.danielwegener 提供)。
1. 添加依赖
在 Maven 的 pom.xml 中引入:
<dependency>
<groupId>com.github.danielwegener</groupId>
<artifactId>logback-kafka-appender</artifactId>
<version>0.2.0-RC2</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.6.0</version>
</dependency>注意版本兼容性:Kafka 客户端版本建议与你的 Kafka 集群版本对齐(如集群是 3.5.x,用 3.5.x 的 kafka-clients)。
2. 配置 logback.xml
在 logback.xml 中定义 Kafka appender,并绑定到 logger:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
<configuration>
<appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender">
<encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
</encoder>
<pre class='brush:java;toolbar:false;'> <topic>app-logs</topic>
<keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
<producerConfig>bootstrap.servers=127.0.0.1:9092</producerConfig>
<producerConfig>acks=1</producerConfig>
<producerConfig>retries=3</producerConfig>
<producerConfig>linger.ms=10</producerConfig>
<producerConfig>batch.size=16384</producerConfig>
</appender>
<root level="INFO">
<appender-ref ref="KAFKA"/>
</root></configuration>
-
topic:指定目标 Kafka 主题,需提前创建或确保自动创建已开启 -
keyingStrategy:不设 key 用NoKeyKeyingStrategy;若需按 traceId 分区,可自定义 keying 策略 -
deliveryStrategy:推荐异步(AsynchronousDeliveryStrategy),避免阻塞业务线程 -
producerConfig:支持任意 Kafka Producer 配置项,用键值对形式写入
3. 可选:结构化日志(JSON 格式)
便于 Kafka 消费端解析,替换 encoder:
<encoder class="com.github.danielwegener.logback.kafka.encoding.JsonLayoutKafkaMessageEncoder">
<layout class="net.logstash.logback.layout.LogstashLayout" />
</encoder>此时需额外添加依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>这样每条日志会以 JSON 形式发送,含 timestamp、level、logger、message、thread 等字段。
4. 注意事项
- Kafka appender 启动时会初始化 Producer,若 broker 不可达,可能抛异常或静默失败——建议检查日志中是否有
KafkaAppender初始化成功提示 - 生产环境务必设置
acks=all或acks=1并配好retries,避免日志丢失 - 异步发送下,JVM 退出前需显式关闭 Logback 上下文(如 Spring Boot 中一般自动处理),否则可能丢最后一批日志
- 高吞吐场景可调大
batch.size和linger.ms,但会增加延迟


















