码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-19 23:04:28      阅读:438      评论:0      收藏:0      [点我收藏+]

标签:

使用的框架是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>

 

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

标签:

原文地址:http://www.cnblogs.com/visoncheng/p/4587315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!