springAOP拦截并打印controller层请求日志---注解方式实现
2017-11-02 14:24
543 查看
/** * Aop implementation of request log printing * * Created by wenqiangxia on 9:07 2017/10/27 */ @Component @Aspect public class RequestLog { public static final Logger LOG = LoggerFactory.getLogger(RequestLog.class); /** * Define a pointcut */ // @Pointcut("execution(* com.wqxia.*.*(..))") @Pointcut("@annotation(com.wqxia.common.log.annotation.SystemLog)") public void controllerLog() {} /** * Print Log before controller * @param joinPoint */ @Before("controllerLog()") public void before(JoinPoint joinPoint) throws Exception { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); LOG.info("请求IP:{}", request.getRemoteAddr()); LOG.info("请求路径:{}", request.getRequestURL()); LOG.info("请求方式:{}", request.getMethod()); LOG.info("方法描述:{}", getMethodDescription(joinPoint)); LOG.info("请求参数:{}", JSONObject.toJSONString(request.getParameterMap())); } /** * Print the time that request method execution spend * @param joinPoint * @throws Throwable */ @Around("controllerLog()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object[] args = joinPoint.getArgs(); Object retVal = joinPoint.proceed(args); long endTime = System.currentTimeMillis(); LOG.info("执行时间:{} ms", endTime - startTime); LOG.info("返回值:{}\n\t", JsonUtils.obj2Json(retVal)); return retVal; } /** * Print exception * @param ex */ @AfterThrowing(throwing = "ex", pointcut = "controllerLog()") public void afterThrowing(Throwable ex) { LOG.error("发生异常:{}", ex.toString()); } /** * Acquire the description for annotation target method * @param joinPoint * @return * @throws Exception */ protected String getMethodDescription(JoinPoint joinPoint) throws Exception { String targetName = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); Object[] arguments = joinPoint.getArgs(); Class<?> targetClass = Class.forName(targetName); Method[] methods = targetClass.getMethods(); String description = ""; for (Method method : methods) { if(method.getName().equals(methodName)) { Class<?>[] clazzs = method.getParameterTypes(); if(clazzs.length == arguments.length) { description = method.getAnnotation(SystemLog.class).description(); break; } } } return description; } }
注解:
/**
* System log annotation for controller or service
* Created by wenqiangxia on 9:10 2017/11/2
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SystemLog {
String description() default "";
}
注解加在controller层方法上即可
相关文章推荐
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- java SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- java SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- Spring AOP拦截Service实现日志管理(自定义注解的方式)
- java SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- aop:aspectj-autoproxy,SpringAOP拦截Controller,Service实现日志管理(自定义注解方式)