news 2026/7/18 6:54:17

Kafka 和springboot 整合Logback日志

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kafka 和springboot 整合Logback日志

Spring Boot 整合 Kafka 进行日志处理是一个常见的任务,可以帮助你更好地管理和分析应用程序的日志。以下是一个基本的步骤指南,帮助你完成这个整合。

本文介绍了如何在SpringBoot应用中整合Kafka,利用Logback收集日志并发送到Kafka。详细步骤包括添加Kafka相关依赖,配置logback.xml,自定义KafkaAppender以及提供测试。

首先安装kafka.。之前已经安装过了,我们这里不再讲。,可以参考前面讲的类容:

https://blog.csdn.net/lchmyhua88/article/details/155640953?spm=1001.2014.3001.5502

接着我们按照下面的步骤开始:

  • 1.pom依赖
  • 2.logback.xml配置
  • 3.配置 kafka消费者
  • 4.监听消费消息&测试代码

1. 添加依赖

<!-- Spring Boot Starter Kafka --> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> <!-- Logback Kafka Appender --> <dependency> <groupId>com.github.danielwegener</groupId> <artifactId>logback-kafka-appender</artifactId> <version>0.2.0-RC2</version> </dependency> <!-- Kafka Clients --> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.0</version> </dependency>

2.配置 Logback

<configuration> <!-- 控制台输出appender --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- Kafka appender --> <appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <!-- Kafka topic名称 --> <topic>log-topic</topic> <!-- Kafka bootstrap servers --> <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" /> <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" /> <!-- Kafka producer配置 --> <producerConfig>bootstrap.servers=192.168.33.10:9092</producerConfig> <producerConfig>acks=0</producerConfig> <producerConfig>linger.ms=1000</producerConfig> <producerConfig>max.block.ms=0</producerConfig> <!-- 过滤器设置(可选) --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> </appender> <!-- 根logger配置 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="KAFKA"/> </root> </configuration>

3.配置 kafka消费者,为了方便测试我们把生产者消费者都配置上

spring.kafka.bootstrap-servers=192.168.33.10:9092 #spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.enable-auto-commit=true spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer spring.kafka.consumer.properties.spring.json.trusted.packages=* spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonDeserializer

4.注入kafka bean ,方便后面调试生产者。

@Configuration public class KafkaProducerConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServers; @Bean public ProducerFactory<String, Object> producerFactory() { Map<String, Object> configProps = new HashMap<>(); configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); return new DefaultKafkaProducerFactory<>(configProps); } @Bean public KafkaTemplate<String, Object> kafkaTemplate() { return new KafkaTemplate<>(producerFactory()); } }

5.监听消费消息

@Component public class LogConsumer { @KafkaListener(topics = "log-topic",groupId = "my-group") public void listen(String message) { System.out.println("收到日志消息: " + message); } }

6.添加日志打印

@RestController @RequestMapping("/kafka") public class LogController { @Autowired private KafkaProducerServiceImpl producerService; private static final Logger logger = (Logger) LoggerFactory.getLogger(LogController.class); @GetMapping("/log") public String log() { //producerService.sendLogMessage("This is a test log message"); logger.info("这是一条测试日志消息"); logger.warn("这是一条警告日志消息"); logger.error("这是一条错误日志消息"); return "Log message sent"; } }

下面我们开始测试,通过调用接口:

控制台可以看到我写3条日志,kafka消费3条消息

这样我们就通过logback把日志收集到kafka里面。方便数据分析。当然你也可以写入es进行分析画像。

我们可以通过kafka manger控制台来监控消息。

下载kafka-manager,下载地址: https://github.com/yahoo/kafka-manager

解压后配置application.conf kafka地址:

保存后,指定8888端口启动:

bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8888

启动后打开控制面板,可以看到kafka集群节点信息和分区,消费偏移等信息:

http://192.168.33.10:8888/

详情可以去官网看看介绍:

https://github.com/yahoo/CMAK

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 4:56:47

突破43%成功率!WebRL-GLM-4-9B开源模型颠覆网页自动化行业格局

突破43%成功率&#xff01;WebRL-GLM-4-9B开源模型颠覆网页自动化行业格局 【免费下载链接】webrl-glm-4-9b 项目地址: https://ai.gitcode.com/zai-org/webrl-glm-4-9b 导语 你还在为网页代理任务成功率不足10%而烦恼吗&#xff1f;智谱AI最新发布的WebRL-GLM-4-9B模…

作者头像 李华
网站建设 2026/7/18 0:26:34

AI_用户增长引擎升级的前端落地全指南

AI当“增长军师”&#xff1a;用户增长引擎升级的前端落地全指南&#xff08;小白版&#xff09; 你有没有过这种体验&#xff1a; 打开某购物APP&#xff0c;首页正好是你最近想买的露营装备优惠&#xff1b;刚犹豫要不要下单&#xff0c;就弹出“新客首单减10元”的券&#x…

作者头像 李华
网站建设 2026/7/15 7:57:01

27、Unix 系统中的文档格式化与打印

Unix 系统中的文档格式化与打印 文档格式化系统 在处理小型简单的文本任务时,简单的文本格式化工具表现出色,但对于大型任务,Unix 系统提供了更强大的解决方案。Unix 能在技术和科学用户中流行起来,除了提供强大的多任务、多用户软件开发环境外,还在于它提供了可用于生成…

作者头像 李华
网站建设 2026/7/15 10:09:14

30、编写脚本与项目搭建入门指南

编写脚本与项目搭建入门指南 编写第一个脚本 在 Linux 系统中,编写一个简单的脚本是学习自动化任务的重要一步。让我们从一个经典的“Hello World!”脚本开始。 [me@linuxbox ~]$ echo Hello World! # This is a comment too Hello World!在这个示例中,我们使用 echo 命…

作者头像 李华
网站建设 2026/7/16 15:31:00

33、提升程序交互性:键盘输入读取与循环控制

提升程序交互性:键盘输入读取与循环控制 1. 为程序添加交互性 在编程中,许多程序缺乏与用户交互的能力。以之前的整数评估脚本为例: #!/bin/bash # test-integer2: evaluate the value of an integer. INT=-5 if [[ "$INT" =~ ^-?[0-9]+$ ]]; thenif [ "…

作者头像 李华
网站建设 2026/7/17 5:56:40

34、Bash脚本中的循环控制与故障排除

Bash脚本中的循环控制与故障排除 1. 循环控制 在Bash脚本中,循环是一种强大的工具,可用于重复执行特定的任务。常见的循环结构有 while 和 until 。 1.1 while循环 while 循环会在条件为真时持续执行代码块。以下是一个菜单驱动的系统信息程序示例: #!/bin/bash #…

作者头像 李华