spring aop 6 环绕通知记录应用的日志

使用的框架是spring mvc+spring

最近想利用spring aop的环绕通知来处理web的日志问题,总的来讲,如果在controller层做切入,则难监控实际运行情况,在service层做切入,则只能监控到service层的情况,通过捕捉service抛出的异常来记录日志,对于目前本人应用而言,已经足够了,先将记录如下:

代码:


@Component
@Aspect
public class ExceptionLog {


    /**
     * 61      * 环绕通知需要携带ProceedingJoinPoint类型的参数
     * 62      * 环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法。
     * 63      * 而且环绕通知必须有返回值,返回值即为目标方法的返回值
     * 64
     */
    @Around("execution(* *com.test.service..*.*(..))")
    public Object aroundMethod(ProceedingJoinPoint pjd) throws Throwable {
        Object result = null;
        String methodName = "class:" + pjd.getTarget().getClass().getName() + " method:" + pjd.getSignature().getName(); //获取方法名称


        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //获取请求的URL//执行目标方法
        try {
            //前置通知
            result = pjd.proceed();//返回通知
        } catch (Throwable e) {
            //异常通知
//            System.out.println("The method " + methodName + " occurs expection : " + e);throw e;  /让spring处理异常
        }finally {
           //记录日志




        }
        return result;  //必须返回结果,否则controller无法获取service返回的结果(正常情况下)
    }
}




spring 配置:

 <aop:aspectj-autoproxy/>

web.xml配置(主要是用于获取方便程序获取HttpServletRequest)

 <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值