使用 Spring Boot 实现 Filter 接口请求日志
记录接口请求日志是后端开发中非常重要的一部分,能够帮助我们了解系统中的请求情况以及进行问题排查。本文将带领刚入行的小白逐步实现 Spring Boot 的接口请求日志功能。
整体流程
我们将通过以下步骤来实现接口请求日志的记录功能:
步骤 | 描述 |
---|---|
1 | 创建一个 Spring Boot 项目 |
2 | 定义 Filter 的实现类 |
3 | 注册 Filter |
4 | 编写日志记录代码 |
5 | 测试接口请求 |
步骤详解
1. 创建一个 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择 Web 依赖,生成项目后导入到 IDE 中。
2. 定义 Filter 的实现类
在项目中创建一个新的 Filter 类,例如 RequestLoggingFilter
。
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 捕获所有请求
public class RequestLoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化配置,如果需要的话
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long startTime = System.currentTimeMillis(); // 开始时间
chain.doFilter(request, response); // 继续请求
long endTime = System.currentTimeMillis(); // 结束时间
// 计算执行时间并打印日志
System.out.println("Request processed in: " + (endTime - startTime) + "ms");
}
@Override
public void destroy() {
// 清理工作,如果需要的话
}
}
@WebFilter("/*")
:注解定义了此 Filter 将拦截所有 URL 请求。doFilter
方法中,我们记录了请求开始和结束的时间,并在控制台打印出请求处理时长。
3. 注册 Filter
在 Spring Boot 中,Filter 可以通过注解自动注册,然而更复杂的 Filter 可能需要更多注册步骤,通常我们可以在主类中进行注册。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. 编写日志记录代码
如之前 Filter 实现中的 doFilter
方法一样,我们已经通过 System.out.println
打印了请求日志。在实际项目中,我们可以使用日志框架(如 SLF4J)来更规范地记录日志。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 在类中定义 logger
private static final Logger logger = LoggerFactory.getLogger(RequestLoggingFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long startTime = System.currentTimeMillis();
chain.doFilter(request, response);
long endTime = System.currentTimeMillis();
// 使用 logger 打印日志
logger.info("Request processed in: " + (endTime - startTime) + "ms");
}
5. 测试接口请求
启动 Spring Boot 应用,并通过 Postman 或其他工具发送接口请求,查看控制台或日志文件,确认日志记录是否准确。
stateDiagram
[*] --> 创建项目: 开始创建 Spring Boot 项目
创建项目 --> 定义 Filter: 定义 RequestLoggingFilter 类
定义 Filter --> 注册 Filter: 注册 Filter 到 Spring
注册 Filter --> 编写日志: 编写日志记录代码
编写日志 --> 测试接口: 通过工具测试接口请求
测试接口 --> [*]: 结束
结尾
通过以上步骤,我们成功实现了一个简单的请求日志 Filter。该 Filter 在每次请求被处理时都会记录处理时长,方便我们监控系统性能。希望你在实际开发中能进一步优化和扩展这个功能,比如记录请求路径、参数等信息。如果有其他问题,欢迎再次提问!