统一controller的日志记录

定义切面,然后匹配controller,around进行log打印

@Slf4j
@Component
@Aspect
public class ControllerLogAspect {
    @Pointcut("execution(* delta.main.controller..*(..))")
    public void requestServer() {
    }

    @SneakyThrows
    @Around("requestServer()")
    public Object doAround(ProceedingJoinPoint pjp) {
        //记录请求开始执行时间:
        long beginTime = System.currentTimeMillis();
        //获取请求信息
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = sra.getRequest();
        //获取请求地址、请求类名、方法名
        String requestMethod = request.getMethod();
        String requestURI = request.getRequestURI();
        String methodName = pjp.getSignature().getName();
        String clazzName = pjp.getTarget().getClass().getName();

        //获取请求参数:
        MethodSignature ms = (MethodSignature) pjp.getSignature();
        //获取请求参数类型
        String[] parameterNames = ms.getParameterNames();
        //获取请求参数值
        Object[] parameterValues = pjp.getArgs();
        StringBuilder paramsStringBuilder = new StringBuilder();
        //组合请求参数,进行日志打印
        if (parameterNames != null && parameterNames.length > 0) {
            for (int i = 0; i < parameterNames.length; i++) {
                if ((parameterValues[i] instanceof HttpServletRequest) || (parameterValues[i] instanceof HttpServletResponse)) {
                    paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(parameterValues[i]).append("]");
                } else {
                    paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(JsonUtils.toJSONString(parameterValues[i])).append("]");
                }
            }
        }
        Object result = pjp.proceed();
        String resultJson = (result != null) ? ((result instanceof Result) ? JsonUtils.toJSONString(result) : String.valueOf(result)) : "";
        //记录请求完成执行时间:
        long usedTime = System.currentTimeMillis() - beginTime;
        //记录日志
        log.info("\n请求执行完毕!\n" +
                "URI信息:{}\n" +
                "请求方式:{}\n" +
                "请求耗时:{}ms\n" +
                "请求响应方法:{}\n" +
                "请求参数列表:{}\n" +
                "返回值:{}", requestURI, requestMethod,usedTime, clazzName + "#" + methodName, paramsStringBuilder.toString(), resultJson);
        return result;
    }
}
posted @   SpecialSpeculator  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2021-05-06 设计模式,建造者模式
点击右上角即可分享
微信分享提示