Skip to content

AOP 版

简介

continew-starter-log-aop 是 ContiNew Starter 日志模块基于 AOP 的实现(@since 2.8.0),通过 @Log 注解选择性记录接口日志(请求/响应信息、异常、耗时等),并提供控制器层访问日志打印,与 Spring Doc 注解联动效果最佳。

主要特性

  • 按需记录: 切点为 @Log 注解,按方法/类精细声明记录范围
  • 内容可配: 请求头/参数、响应头/参数、IP 归属地、浏览器/OS 等信息均可按需包含或排除
  • 访问日志: 控制器层全量访问日志打印,支持敏感参数过滤与超长参数截断(@since 2.10.0
  • 可插拔存储: 默认内存存储(容量 100),实现 LogDao 接口即可接管持久化

与拦截器版互斥

本模块与 拦截器版(log-interceptor) 注册的是同一个自动配置类,不可同时引入。选择建议:需要"Web 层全量记录、不改业务代码"选拦截器版;需要"按 @Log 注解精细声明、与 Spring Doc 注解联动"选本模块。

快速开始

引入依赖

pom.xml
xml
<dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-log-aop</artifactId>
</dependency>

添加配置

配置详情请查看:top.continew.starter.log.model.LogProperties@since 1.1.0,由 log-core 提供,与拦截器版共用)。

application.yml
yaml
--- ### 日志配置
continew-starter.log:
  # 是否启用(默认 true)
  enabled: true
  # 包含信息(默认:请求头、请求参数、响应头、响应参数)
  includes:
    - REQUEST_HEADERS
    - REQUEST_PARAM
    - RESPONSE_HEADERS
    - RESPONSE_PARAM
  # 放行路由(默认为空)
  exclude-patterns: []
  ## 访问日志配置(@since 2.10.0)
  access-log:
    # 是否启用(默认 false,不记录请求日志也支持开启打印访问日志)
    enabled: false
    # 是否打印请求参数(body/query/form,默认 false)
    print-request-param: false
    # 是否过滤敏感参数(默认 false)
    param-sensitive: false
    # 敏感参数字段列表(精确匹配,区分大小写)
    sensitive-params: []
    # 是否自动截断超长参数值(默认 false)
    long-param-truncate: false
    # 超长参数检测阈值(单位:字符,默认 2000)
    long-param-threshold: 2000
    # 超长参数最大保留长度(单位:字符,默认 50)
    long-param-max-length: 50
    # 超长参数截断后缀(默认 ...)
    long-param-suffix: ...

可选包含信息(Include 枚举):DESCRIPTION、MODULE、REQUEST_HEADERS、REQUEST_BODY、REQUEST_PARAM、IP_ADDRESS、BROWSER、OS、RESPONSE_HEADERS、RESPONSE_BODY、RESPONSE_PARAM。

使用 @Log 注解

java
@Log(module = "系统管理", description = "新增用户")
@PostMapping
public RespBody<Void> add(@Valid @RequestBody UserReq req) {
    // 方法执行完成(含异常)后记录一条日志:请求与响应信息、耗时、异常信息等
}

@Log 注解属性(@since 1.1.0):description(日志描述,优先级高于 @Operation(summary))、module(所属模块,方法 > 类 > @Tag(name))、includes / excludes(在全局配置基础上增减包含信息)、ignore(是否忽略记录)。标注 @Hidden@Operation(hidden = true) 的接口不会被记录。

自定义存储与处理

实现 LogDao 接口并注册为 Bean,即可将日志持久化到数据库等存储(默认实现 DefaultLogDao 为内存存储,容量 100):

java
@Component
public class CustomLogDao implements LogDao {
    // ...
}

也可通过继承 AbstractLogHandler 或替换 LogAspect Bean 自定义处理逻辑。

核心依赖

依赖描述
top.continew.starter:continew-starter-log-core日志模块 - 核心模块(@Log 注解、配置属性、日志模型与 SPI)

参考资料

  1. ContiNew Starter 拦截器版日志模块