1. 项目目标
使用前面章节构建的Java通用日志组件完成springboot
项目日志写入kafka.
2. 写入前提
- kafka已启动
如果没有kafka,可参照 kafka单机容器版本安装教程 - kafka-manager已启动
如果没有kafka-manager,可参照 kafka-manager容器版本安装教程 - Java通用日志组件已安装到本地仓库(或上传至maven私服)
若果未安装,可参照 Java通用日志组件
3. 项目构建
3.1 创建springboot项目
- 主要maven依赖如下
<!-- 以springboot web项目做演示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Java通用日志组件 -->
<dependency>
<groupId>tech.nosql</groupId>
<artifactId>logback-kafka</artifactId>
<version>1.0</version>
</dependency>
<!-- 简化项目代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
- logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="30 second">
<include resource="logback-boot.xml"/>
<logger name="org.apache.kafka" level="WARN"/>
<logger name="tech.nosql" level="DEBUG"/>
</configuration>
上面的配置将Java通用日志组件
中的logback-boot.xml引入logback中作为基础配置,并设置了tech.nosql
包日志级别为debug
- application.properties
springboot项目核心配置文件application.properties
内容如下:# 是关闭控制台日志输出[true|false],默认false log.stdout.disable=false # 文件日志根路径,只要配置了根路径就会开启文件日志 # 完整路径为 ${log.base-path}/${log.kafka.system}/{yyyy-mm-dd}.log log.base-path=D://logs # 日志写入kafka的服务器地址,只要配置此属性,便会开启日志写入kafka log.kafka.bootstrap-servers=192.168.1.14:9092 # 日志写入kafka主题名 log.kafka.topic=log_kafka_dev # 应用名称,用于标识文件路径以及es中的索引名称 log.kafka.system=logback-kafka-springboot-dev
- LogController
LogController
实现一个简单接口,通过浏览器请求,进行日志输出.
package tech.nosql.web;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
/**
* 日志写入测试
*
* @author faith.huan 2020-09-03 22:44
*/
@Slf4j
@RestController
public class LogController {
/**
* 接收一个val,如果val是int,则打印info日志;如果不是int,则打印异常日志
*
* @param val 参数
* @return int or not
*/
@GetMapping("/log/{val}")
public String log(@PathVariable("val") String val) {
// 设置TID,用于追踪一次请求,可以使用拦截器实现,此处仅供演示用
String tid = UUID.randomUUID().toString();
MDC.put("TID", tid);
try {
int intVal = Integer.parseInt(val);
log.info("intVal:{}", intVal);
return "输入的是int值,tid:" + tid;
} catch (Exception e) {
log.error("发生异常", e);
return "输入的不是int值tid:" + tid;
} finally {
MDC.clear();
}
}
}
3.2 启动springboot项目
直接运行LogbackKafkaSpringbootApplication
类的main方法即可.
3.3 通过kafka-manager查看日志是否写入
- 1. 在浏览器中输入http://192.168.1.14:9000,然后点击我们配置好的
local
集群
- 2. 此时集群中已有三个Topic,点击
3
这个数字,如下图所示:
- 3. 如果发现新增了
log_kafka_dev
这个Topic,则表示日志写入成功了.
- 4. 点击
log_kafka_dev
,查看topic详细信息,此时Sum of partition offsets
为45,说明已经有45条日志写入的kafka,如下图所示
-= - 5. 访问日志接口进行新增日志测试,在浏览器新建一个tab页,输入如下地址
http://localhost:8080/log/1
- **6. ** 刷新kafka-manager页面,查看此时的
Sum of partition offsets
,发现此时的值为49
,说明又有四条日志写入kafka
7. 查看idea控制台日志,验证是否为4条
从控制台日志上看,新增的四条日志由线程http-nio-8080-exec-1
产生,与kafka中日志吻合.