一、使用拦截器在控制台日志打印请求参数和请求路径等信息
public class GlobalRequestInterceptor implements HandlerInterceptor {
private static final Logger log = LoggerFactory.getLogger( GlobalRequestInterceptor.class) ;
public GlobalRequestInterceptor ( ) {
}
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
CgmUser user = SecurityUtils.getUser( ) ;
log.info( "用户信息:{}" , ObjectUtil.isNull( user) ? "用户未登录" : String.format( "uid=%s;phone=%s;username=%s" , user.getId( ) , user.getPhone( ) , user.getUsername( )) ) ;
log.info( "请求地址:[{}]-[{}]" , request.getMethod( ) , request.getRequestURL( )) ;
log.info( "GET请求参数:[{}]" , request.getQueryString( )) ;
log.info( "控制层:[{}]" , handler) ;
return true ;
}
}
二、使用Aop在控制台 日志打印请求参数和请求路径等信息
@Aspect
@Component
@Slf4j
public class LogAspect {
@Pointcut( "execution(public * com.cgmcomm.cgm.admin.controller.*.*(..))" )
public void requestAspect ( ) { }
@Before( value = "requestAspect()" )
public void methodBefore( JoinPoint joinPoint) {
ServletRequestAttributes requestAttributes = ( ServletRequestAttributes) RequestContextHolder.getRequestAttributes( ) ;
HttpServletRequest request = requestAttributes.getRequest( ) ;
//打印请求内容
//获取当前登录人,util可以自己写
log.info( "用户信息:{}" , ObjectUtil.isNull( SecurityUtils.getUser( )) ? "用户未登录" : String.format( "uid=%s;phone=%s;username=%s" , user.getId( ) , user.getPhone( ) , user.getUsername( )) ) ;
// log.info( "请求ip:" +request.getRemoteAddr( )) ;
log.info( "请求地址:{},请求方式:{},请求类方法:{},请求类方法参数:{}" ,
request.getRequestURL( ) .toString( ) ,request.getMethod( ) ,
joinPoint.getSignature( ) ,Arrays.toString( joinPoint.getArgs( )) ) ;
}
//在方法执行完结后打印返回内容
@AfterReturning( returning = "o" ,pointcut = "requestAspect()" )
public void methodAfterReturing( Object o ) {
log.info( "返回数据:{}" , JSONObject.toJSONString( o)) ;
}
}