拦截器版 (interceptor)
简介
continew-starter-log-interceptor
是 ContiNew Starter 日志模块基于拦截器(Interceptor)的实现,最初基于 Spring Boot Actuator 项目的 HttpExchange(原 HttpTrace)功能实现。
主要特性
- 灵活配置 HTTP 请求日志记录内容(请求头、请求体、请求参数、IP 归属地、浏览器、操作系统、响应头、响应体、响应参数等)
- 支持启用控制台 HTTP 日志输出,即使不记录日志的接口也可开启访问日志打印(类似 Nginx access log)
- 支持配置放行路由,指定不进行日志拦截的路径
- 支持将日志数据持久化到任意数据源
- 与 Spring Doc 无缝集成,自动实现操作日志记录
快速开始
引入依赖
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-log-interceptor</artifactId>
</dependency>
添加配置
详细配置可参考:top.continew.starter.log.model.LogProperties
配置类。
yaml
--- ### 日志配置
## API 请求/响应日志配置
continew-starter.log:
## 记录信息
includes:
- DESCRIPTION
- MODULE
- REQUEST_HEADERS
- REQUEST_BODY
- IP_ADDRESS
- BROWSER
- OS
- RESPONSE_HEADERS
- RESPONSE_BODY
## 访问日志配置
access-log:
# 是否打印访问日志(类似于 Nginx access log)
enabled: true
# 是否打印请求参数(body/query/form)
print-request-param: true
# 是否自动截断超长参数值(如 base64、大文本)
long-param-truncate: true
# 超长参数检测阈值(单位:字符)
long-param-threshold: 2000
# 超长参数最大保留长度(单位:字符)
long-param-max-length: 50
# 截断后追加的后缀符号(如配置 "..." 会让截断内容更直观)
long-param-suffix: ...
# 是否过滤敏感参数
param-sensitive: true
# 敏感参数字段列表(如:password,token,idCard)
sensitive-params:
- password
- oldPassword
除了必然记录的请求方式、请求 URL 等基础信息外,其他记录内容支持灵活配置组合,默认记录请求头、请求参数、响应头和响应参数。
局部配置
通过 @Log
注解,可针对单个接口或类进行精细化日志记录配置,支持自定义包含信息、排除信息以及是否忽略日志记录。
详细说明请查看:top.continew.starter.log.annotation.Log
注解。
java
/**
* 日志注解
* <p>用于接口方法或类上,辅助 Spring Doc 使用效果最佳</p>
*
* @author Charles7c
* @since 1.1.0
*/
@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
/**
* 日志描述(仅用于接口方法上)
* <p>
* 优先级:@Log("描述") > @Operation(summary="描述")
* </p>
*/
String value() default "";
/**
* 所属模块(用于接口方法或类上)
* <p>
* 优先级:接口方法上的 @Log(module = "模块") > 接口类上的 @Log(module = "模块") > @Tag(name = "模块") 内容
* </p>
*/
String module() default "";
/**
* 包含信息(在全局配置基础上扩展包含信息)
*/
Include[] includes() default {};
/**
* 排除信息(在全局配置基础上减少包含信息)
*/
Include[] excludes() default {};
/**
* 是否忽略日志记录(用于接口方法或类上)
*/
boolean ignore() default false;
}
辅助 Spring Doc
与 Spring Doc 集成可实现操作日志自动记录功能,系统会自动识别 Spring Doc 注解配置来记录日志的模块和行为信息。@Log
注解的配置优先级高于 Spring Doc 注解。
模块信息获取优先级:
- @Log(module = "部门管理") -> 部门管理
- @Tag(name = "部门管理") -> 部门管理
行为信息获取优先级:
- @Log("新增部门") -> 新增部门
- @Operation(summary="新增部门") -> 新增部门
保存日志
通过实现 top.continew.starter.log.dao.LogDao
日志持久层接口,重写 add
方法可以实现将日志记录保存到任意指定数据源。
java
@RequiredArgsConstructor
public class LogDaoLocalImpl implements LogDao {
private final XxxMapper xxxMapper;
@Override
public void add(LogRecord logRecord) {
// 实现日志记录保存逻辑
}
}
将自定义的日志持久层实现类注入到 Spring 容器中:
java
@Configuration
@ConditionalOnEnabledLog
public class LogConfiguration {
/**
* 日志持久层接口本地实现类
*/
@Bean
public LogDao logDao() {
return new LogDaoLocalImpl();
}
}
核心依赖
依赖 | 描述 |
---|---|
top.continew.starter:continew-starter-log-core | 日志模块 - 核心模块 |
io.swagger.core.v3:swagger-annotations-jakarta | Swagger 注解 |