AOP 版
日志模块的 AOP 实现,以 @Log 注解为切点,按方法或类精细声明记录范围,与 Spring Doc 注解联动。
AOP 版以 @Log 注解为切点,在方法执行完成(含异常)后记录一条日志。适合只关心关键操作、希望日志量可控的场景。
引入依赖
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-log-aop</artifactId>
</dependency>使用 @Log 注解
@Log(module = "系统管理", value = "新增用户")
@PostMapping
public Resp<Void> add(@Valid @RequestBody UserReq req) {
// 记录内容:请求与响应信息、耗时、异常信息等
}@Log 注解属性(top.continew.starter.log.annotation.Log):
| 属性 | 说明 |
|---|---|
value | 日志描述(仅用于方法上),优先级高于 @Operation(summary) |
module | 所属模块(方法或类上),优先级:方法上的 @Log(module) > 类上的 @Log(module) > @Tag(name) |
includes | 在全局配置基础上扩展包含信息 |
excludes | 在全局配置基础上减少包含信息 |
ignore | 是否忽略日志记录(方法或类上,默认 false) |
标注 @Hidden 或 @Operation(hidden = true) 的接口不会被记录。
配置
前缀 continew-starter.log,与拦截器版共用(完整表见配置参考)。
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | boolean | true | 是否启用日志模块 |
includes | Set<Include> | REQUEST_HEADERS、REQUEST_PARAM、RESPONSE_HEADERS、RESPONSE_PARAM | 全局包含信息 |
exclude-patterns | List<String> | 空 | 放行路由(Ant 风格路径) |
access-log.enabled | boolean | false | 是否打印访问日志 |
access-log.print-request-param | boolean | false | 访问日志是否打印请求参数 |
access-log.param-sensitive | boolean | false | 是否过滤敏感参数 |
access-log.sensitive-params | List<String> | 空 | 敏感参数字段列表(精确匹配、区分大小写) |
access-log.long-param-truncate | boolean | false | 是否自动截断超长参数值 |
access-log.long-param-threshold | int | 2000 | 超长参数检测阈值(字符) |
access-log.long-param-max-length | int | 50 | 截断后最大保留长度(字符) |
access-log.long-param-suffix | String | ... | 截断后追加的后缀符号 |
包含信息(Include 枚举)
| 枚举值 | 说明 |
|---|---|
DESCRIPTION | 接口描述(来自 @Log 或 @Operation) |
MODULE | 所属模块(来自 @Log 或 @Tag) |
REQUEST_HEADERS | 请求头(默认) |
REQUEST_BODY | 请求体(包含请求体时请求参数无效) |
REQUEST_PARAM | 请求参数(默认) |
IP_ADDRESS | IP 归属地 |
BROWSER | 浏览器 |
OS | 操作系统 |
RESPONSE_HEADERS | 响应头(默认) |
RESPONSE_BODY | 响应体(包含响应体时响应参数无效) |
RESPONSE_PARAM | 响应参数(默认) |
自定义存储与处理器
默认实现 DefaultLogDao 将日志保存在内存中(容量 100 条,超出后丢弃最旧记录)。实现 top.continew.starter.log.dao.LogDao 并注册为 Bean 即可持久化到数据库等任意存储(LogDao Bean 标注了 @ConditionalOnMissingBean,会被你的实现覆盖):
@Configuration
@ConditionalOnEnabledLog
public class LogConfiguration {
@Bean
public LogDao logDao() {
return new CustomLogDao();
}
}默认处理器为 AopLogHandler;需要自定义日志内容处理时继承 AbstractLogHandler,或直接替换 LogAspect / AccessLogAspect Bean。
相关源码
- continew-starter-log-aop:切面与处理器