ContiNew

拦截器版

日志模块的拦截器实现,基于 Spring MVC 拦截器对 Web 层接口全量记录,无需修改业务代码。

拦截器版通过 LogInterceptor 对 Web 层接口全量记录(最初参考 Spring Boot Actuator 的 HttpExchange / HttpTrace)。适合审计全量请求、接受较大日志量的场景。

引入依赖

<dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-log-interceptor</artifactId>
</dependency>

全量记录与局部调整

引入后无需任何注解,所有 Web 接口都会被记录。要对单个接口或类精细调整,使用 @Log 注解(top.continew.starter.log.annotation.Log):

@Log(module = "系统管理", value = "新增用户", includes = Include.IP_ADDRESS)
@PostMapping
public Resp<Void> add(@Valid @RequestBody UserReq req) {
    // 在全局 includes 基础上额外记录 IP 归属地
}

@Log 注解属性:value(日志描述)、module(所属模块)、includes(扩展包含信息)、excludes(减少包含信息)、ignore(是否忽略记录)。标注 @Hidden 或 @Operation(hidden = true) 的接口不会被记录。

配置

前缀 continew-starter.log,与 AOP 版共用(完整表见配置参考)。

配置项类型默认值说明
enabledbooleantrue是否启用日志模块
includesSet<Include>REQUEST_HEADERS、REQUEST_PARAM、RESPONSE_HEADERS、RESPONSE_PARAM全局包含信息
exclude-patternsList<String>空放行路由(Ant 风格路径)
access-log.enabledbooleanfalse是否打印访问日志
access-log.print-request-parambooleanfalse访问日志是否打印请求参数
access-log.param-sensitivebooleanfalse是否过滤敏感参数
access-log.sensitive-paramsList<String>空敏感参数字段列表(精确匹配、区分大小写)
access-log.long-param-truncatebooleanfalse是否自动截断超长参数值
access-log.long-param-thresholdint2000超长参数检测阈值(字符)
access-log.long-param-max-lengthint50截断后最大保留长度(字符)
access-log.long-param-suffixString...截断后追加的后缀符号

包含信息(Include 枚举)

枚举值说明
DESCRIPTION接口描述(来自 @Log 或 @Operation)
MODULE所属模块(来自 @Log 或 @Tag)
REQUEST_HEADERS请求头(默认)
REQUEST_BODY请求体(包含请求体时请求参数无效)
REQUEST_PARAM请求参数(默认)
IP_ADDRESSIP 归属地
BROWSER浏览器
OS操作系统
RESPONSE_HEADERS响应头(默认)
RESPONSE_BODY响应体(包含响应体时响应参数无效)
RESPONSE_PARAM响应参数(默认)

全量记录下日志量随接口调用量线性增长。exclude-patterns 建议至少排除健康检查、静态资源与文档路径;访问日志打印本身会自动排除 /doc.html、/v*/api-docs/**、/swagger-ui/**、/webjars/**、/favicon.ico、/actuator/**、/error 等。

自定义存储与处理器

默认实现 DefaultLogDao 将日志保存在内存中(容量 100 条,超出后丢弃最旧记录)。全量记录场景下建议尽早替换为持久化实现:实现 top.continew.starter.log.dao.LogDao 并注册为 Bean 即可(LogDao Bean 标注了 @ConditionalOnMissingBean)。

@Configuration
@ConditionalOnEnabledLog
public class LogConfiguration {

    @Bean
    public LogDao logDao() {
        return new CustomLogDao();
    }
}

默认处理器为 InterceptorLogHandler;需要自定义日志内容处理时继承 AbstractLogHandler。

相关源码