LoggingInterceptor
概述
LoggingInterceptor是tio-boot内置的日志拦截器,之所以提供了这个接口,是为了提高性能. LoggingInterceptor 是一种自定义拦截器,专门用于在控制器方法执行前后记录日志到数据库。它耦合在 ControllerInterceptor 之后执行,可以:
- before 方法中:采集请求信息、目标控制器、方法参数等并写入日志表
 - after 方法中:检查返回值是否包含敏感数据,并根据需要追加日志或触发告警
 
类定义
package com.litongjava.tio.boot.logging;
import java.lang.reflect.Method;
import com.litongjava.tio.http.common.HttpRequest;
public class LoggingInterceptor {
    /**
     * 在 ControllerInterceptor.before 执行后触发
     *
     * @param request         当前 HttpRequest 对象
     * @param targetController 控制器实例
     * @param actionMethod    即将执行的控制器方法
     * @param paramValues     方法调用时的参数数组
     */
    public void before(HttpRequest request, Object targetController, Method actionMethod, Object[] paramValues) {
        // TODO: 从 request、actionMethod、paramValues 中抽取关键信息
        //       并写入数据库日志表,如:路径、方法名、参数、入参校验结果等
    }
    /**
     * 在 ControllerInterceptor.after 执行后触发
     *
     * @param request            当前 HttpRequest 对象
     * @param targetController    控制器实例
     * @param actionMethod       已执行的控制器方法
     * @param paramValues        方法调用时的参数数组
     * @param actionReturnValue  方法返回值
     * @return 继续向下传递的返回结果,一般不做修改
     */
    public Object after(HttpRequest request, Object targetController, Method actionMethod, Object[] paramValues, Object actionReturnValue) {
        // TODO: 检查 actionReturnValue 中是否包含敏感信息
        //       如发现异常,可追加日志或触发告警
        return actionReturnValue;
    }
}
配置和执行流程
集成顺序:在主应用中,先注册
ControllerInterceptor,再在其后调用LoggingInterceptor。调用时机:
- 框架路由解析并执行 
ControllerInterceptor.before后 - 紧接着调用 
LoggingInterceptor.before记录请求日志 - 业务方法执行并返回后 框架先执行 
LoggingInterceptor.after对返回值进行敏感数据检查 - 然后调用 
ControllerInterceptor.after 
- 框架路由解析并执行 
 注册示例:可在
BootConfiguration中统一组装:public class AppConfig implements BootConfiguration { @Override public void config() { TioBootServer server = TioBootServer.me(); // 主拦截器 server.setControllerInterceptor(new MyControllerInterceptor()); // 后置日志记录 server.addAdditionalInterceptor(new LoggingInterceptor()); } }
注意事项
- 确保 
LoggingInterceptor操作数据库时具备良好性能,避免阻塞主线程 - 针对敏感字段建议使用白名单或黑名单策略,减少误报
 - 日志表结构应支持索引查询和分区归档,保证海量日志存储和快速检索
 
示例场景
- 审计合规:记录用户访问记录,满足审计需求
 - 安全监控:检测返回数据中是否泄露隐私字段,如身份证、手机号等
 - 性能监控:结合耗时统计,分析慢请求和瓶颈
 
