打印方法的请求内容与返回内容的日志

实现

目录

实现效果:

自定义切面MethodLogAspect:

自定义注解@MethodLog:

调用方式:


效果:

2021-03-10 15:16:30.066 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():38 - ---------------------------请求内容-----------------------------
2021-03-10 15:16:30.066 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():41 - 请求地址:/sys/users/1
2021-03-10 15:16:30.066 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():43 - 请求方式:GET
2021-03-10 15:16:30.068 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():45 - 请求类方法:UserDto com.yy.api.application.sys.user.UserManage.getUser(Integer)
2021-03-10 15:16:30.092 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():47 - 请求类方法参数:[1]
2021-03-10 15:16:30.092 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.before():52 - ---------------------------请求内容-----------------------------
2021-03-10 15:16:30.097 DEBUG [http-nio-8081-exec-1] com.yy.mbg.domain.mapper.SysUserMapper.selectById.debug():137 - ==>  Preparing: SELECT id,username,password,nickname,phone,email,gender,birthday,city,icon,login_time,version,status,gmt_create,gmt_modified FROM sys_user WHERE id=?
2021-03-10 15:16:30.098 DEBUG [http-nio-8081-exec-1] com.yy.mbg.domain.mapper.SysUserMapper.selectById.debug():137 - ==> Parameters: 1(Integer)
2021-03-10 15:16:30.100 DEBUG [http-nio-8081-exec-1] com.yy.mbg.domain.mapper.SysUserMapper.selectById.debug():137 - <==      Total: 1
2021-03-10 15:16:30.100 DEBUG [http-nio-8081-exec-1] com.yy.mbg.config.SqlCostInterceptor.intercept():52 - Cost ==> 【2ms】
2021-03-10 15:16:30.130 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.afterReturn():58 - ---------------------------返回结果-----------------------------
2021-03-10 15:16:30.133 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.afterReturn():61 - {"icon":"xxx","password":"yy","nickname":"超级管理员","id":1,"username":"yy","status":1}
2021-03-10 15:16:30.134 DEBUG [http-nio-8081-exec-1] com.yy.core.aspect.ControllerLogAspect.afterReturn():65 - ---------------------------返回结果-----------------------------

自定义切面MethodLogAspect:

package com.yy.core.aspect;

import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * MethodLogAspect: 方法日志切面
 *
 * @Author: YangYang
 * @Date: 2021/3/10 14:47
 */
@Aspect
@Component
@Slf4j
public class MethodLogAspect {

    @Pointcut("@annotation(com.yy.core.annotation.MethodLog)")
    public void pointcutMethod(){

    }

    @Before(value = "pointcutMethod()")
    public void before(JoinPoint joinPoint){

        ServletRequestAttributes requestAttributes =(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest httpServletRequest = requestAttributes.getRequest();

        log.debug("---------------------------请求内容-----------------------------");
        try{
            String url = httpServletRequest.getRequestURI();
            log.debug("请求地址:" + url);
            String way = httpServletRequest.getMethod();
            log.debug("请求方式:" + way);
            String method = joinPoint.getSignature().toString();
            log.debug("请求类方法:" + method);
            String params = JSONUtil.toJsonStr(joinPoint.getArgs());
            log.debug("请求类方法参数:" + params);

        }catch (Exception e){
            log.error(e.getMessage(),e);
        }
        log.debug("---------------------------请求内容-----------------------------");
    }

    @AfterReturning(returning = "obj", pointcut = "pointcutMethod()")
    public void afterReturn(Object obj){

        log.debug("---------------------------返回结果-----------------------------");
        try{
            String result = JSONUtil.toJsonStr(obj);
            log.debug(result);
        }catch (Exception e){
            log.error(e.getMessage(),e);
        }
        log.debug("---------------------------返回结果-----------------------------");
    }
}

自定义注解@MethodLog:

package com.yy.core.annotation;

import java.lang.annotation.*;

/**
 * MethodLog: 方法的参数与返回结果打印日志
 *
 * @Author: YangYang
 * @Date: 2021/3/10 14:45
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MethodLog {
}

调用方式:

    @MethodLog
    @Override
    public UserDto getUser(Integer id) {

        SysUser sysUser = getSysUser(id);
        UserDto userDto = new UserDto();
        BeanUtil.copyProperties(sysUser,userDto);
        return userDto;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值