实现
目录
效果:
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;
}