Spring AOP日志记录

@Slf4j
@Aspect
@Component
public class AspectLogTools {
//    @Aspect 表明是一个切面类
//    @Component 将当前类注入到Spring容器内
//    @Pointcut 切入点,其中execution用于使用切面的连接点。使用方法:execution(方法修饰符(可选) 返回类型 方法名 参数 异常模式(可选)) ,可以使用通配符匹配字符,*可以匹配任意字符。
//    @Before 在方法前执行
//    @After 在方法后执行
//    @AfterReturning 在方法执行后返回一个结果后执行
//    @AfterThrowing 在方法执行过程中抛出异常的时候执行
//    @Around 环绕通知,就是可以在执行前后都使用,这个方法参数必须为ProceedingJoinPoint,proceed()方法就是被切面的方法,上面四个方法可以使用JoinPoint,JoinPoint包含了类名,被切面的方法名,参数等信息。

    /**
     * 每行日志抬头字符串
     */
    private String infoStr = "\n                        ";
    private String errorStr = "\n\t";

    @Autowired
    private HttpServletRequest request;

    /**
     * 配置切面(XXX包下XXX类)以及切入点(XXX类下XXX方法)
     * 匹配多个包 execution(public * com.wgz.springtestdome.controller1.*.*(..))||execution(public * com.wgz.springtestdome.controller2.*.*(..))
     */
    @Pointcut("execution(public * com.wgz.springtestdome.controller.*.*(..))")
    public void logAspect() {
    }

    @Around("logAspect()")
    public Object doAround(ProceedingJoinPoint AfterThrowing) throws Throwable {
        StringBuffer aspectReturnStr = new StringBuffer();
        Object[] args = AfterThrowing.getArgs();
        //此处可对参数args自行操作
        Object result = AfterThrowing.proceed(args);
        //此处可对结果result自行操作
        aspectReturnStr.append(infoStr + "ip:" + RequestTools.getIpAddr(request) + " 的用户访问了系统!!!!");
        aspectReturnStr.append(infoStr + "访问的系统方法:" + AfterThrowing.getSignature());
        aspectReturnStr.append(infoStr + "访问的方法参数:" + Arrays.toString(args));
        aspectReturnStr.append(infoStr + "获取的返回值:" + JSONObject.toJSONString(result));
        aspectReturnStr.append("\n");
        log.info(aspectReturnStr.toString());
        return result;
    }

    @AfterThrowing(pointcut = "logAspect()", throwing = "e")
    public void doAfterTrowing(JoinPoint joinPoint, RuntimeException e) {
        StringBuffer aspectReturnStr = new StringBuffer();
        aspectReturnStr.append(errorStr + "ip:" + RequestTools.getIpAddr(request) + " 的用户访问了系统!!!!");
        aspectReturnStr.append(errorStr + "访问的系统方法:" + joinPoint.getSignature());
        aspectReturnStr.append(errorStr + "访问的方法参数:" + Arrays.toString(joinPoint.getArgs()));
        aspectReturnStr.append(errorStr + "访问时发生了异常,具体异常信息如下!!!!!!");
        log.error(aspectReturnStr.toString());
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值