aop切面记录日志

0 篇文章 0 订阅

xml中配置

<bean id="logAspect" class="com.xinli.log.LogAspect"></bean>

    <aop:config>
        <!-- 切入点 -->
        <aop:pointcut
            expression="execution(* com.xinli.webapp.action.*.*(..)) &amp;&amp; !execution(* com.xinli.webapp.action.MainTreeAction.*(..))"
            id="myPointcut" />
        <!-- 切面: 将哪个对象中的哪个方法,织入到哪个切入点 -->
        <aop:aspect id="myAspect" ref="logAspect">
            <!-- 前置通知  -->
            <aop:before method="doBefore" pointcut-ref="myPointcut" />
            <!-- <aop:after method="doAfter" pointcut-ref="myPointcut"/> --> 
            <aop:after-returning method="doAfterReturning" returning="returnObj" pointcut-ref="myPointcut"/>
        </aop:aspect>
    </aop:config> 

applicationContext-log.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:aop="http://www.springframework.org/schema/aop"  
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans   
                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
                http://www.springframework.org/schema/context   
                http://www.springframework.org/schema/context/spring-context-2.5.xsd  
                http://www.springframework.org/schema/tx  
                http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
                http://www.springframework.org/schema/aop  
                http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
        default-lazy-init="true">  


    <!-- <context:component-scan base-package="com.xinli.log">  
        <context:include-filter type="annotation"   
                 expression="org.aspectj.lang.annotation.Aspect"/>  
    </context:component-scan>  

    <aop:aspectj-autoproxy/> --> 

    <!-- Activates scanning of @Autowired -->
    <context:annotation-config/>

    <!-- Activates scanning of @Repository -->
    <context:component-scan base-package="com.xinli.log">
        <context:include-filter type="annotation"   
                 expression="org.aspectj.lang.annotation.Aspect"/>
    </context:component-scan>

    <aop:aspectj-autoproxy/> 

 </beans> 

LogAspect.java

package com.xinli.log;

import java.util.Arrays;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.xinli.model.User;


@Aspect
@Order(1)
public class LogAspect {

    private String execution="execution(* com.xinli.webapp.action.*.*(..)) "
            + "&& !execution(* com.xinli.webapp.action.MainTreeAction.*(..))"
            + "&& !execution(* com.xinli.webapp.action.LogoutAction.*(..))";

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     *  给所有的controller方法上添加操作日志
     */
    @Pointcut(value="execution(* com.xinli.webapp.action.*.*(..)) && !execution(* com.xinli.webapp.action.MainTreeAction.*(..))")
//    @Pointcut(value="execution(* com.xinli.service.impl.*.*(..)) && !execution(* com.xinli.service.impl.UserManagerImpl.*(..))")
//    @Pointcut(value="execution(* com.xinli.service.impl.*.*(..))")
//    @Pointcut  ("execution(* com.xinli.webapp.action.*.*(..)) && !execution(* com.xinli.webapp.action.MainTreeAction.*(..))")

    public void controllerAspect() {}

    @Before("controllerAspect()")
    public void doBefore(JoinPoint joinPoint) {
        System.out.println("我是doBefore方法!!!");
        if(logger.isTraceEnabled()){
            logger.trace("doBefore()");
        }
//      ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//        HttpServletRequest request = attributes.getRequest();
//        Signature signature = joinPoint.getSignature();
//        SecurityContext ctx = SecurityContextHolder.getContext();
//
//        User user = (User) ctx.getAuthentication().getPrincipal();
//
//        if(logger.isTraceEnabled()){
//            logger.trace("LOGIN USER NAME : {}",user.getUsername());
//            logger.trace("URL : {}",request.getRequestURL().toString());
//            logger.trace("HTTP_METHOD : {}",request.getMethod());
//            logger.trace("IP : {}",request.getRemoteAddr());
//            logger.trace("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
//            logger.trace("ARGS : {}",Arrays.toString(joinPoint.getArgs()));
//            printLog(request);
//        }
//        if(logger.isInfoEnabled()){
//            logger.info("LOGIN USER NAME : {}",user.getUsername());
//            logger.info("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
//            logger.info("ARGS : {}",Arrays.toString(joinPoint.getArgs()));
//            printLog(request);
//        }
//        if(logger.isWarnEnabled()){
//            logger.warn("LOGIN USER NAME : {}",user.getUsername());
//            logger.warn("CLASS_METHOD : {}.{}",signature.getDeclaringTypeName(),signature.getName());
//        }

    }

//    @AfterReturning(pointcut="controllerAspect()",returning="returnObj")
//    public void doAfterReturning(Object returnObj){
//      
//        if(logger.isTraceEnabled()){
//          logger.trace("doAfterReturning()");
//            logger.trace("RETURN RESULT : {}",returnObj.toString());
//        }
//        if(logger.isInfoEnabled()){
//            logger.info("RETURN RESULT : {}",returnObj.toString());
//        }
//    }

    /*@After("controllerAspect()")
    public void doAfter(JoinPoint point){

        if(logger.isTracabled()){
            logger.trace("doAfter()");
        }

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response= attributes.getResponse();

        if(logger.isWarnEnabled()){
            logger.warn("RESPONSE : {}",response.toString());
            logger.warn("RESPONSE STATUS: {}",response.getStatus());
        }

      //有参无返回值的方法
        //此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
        Object[] args = point.getArgs();
        System.out.println("目标参数列表:");
        if (args != null) {
            for (Object obj : args) {
                System.out.println(obj + ",");
            }
            System.out.println();
        }
    }*/

    private void printLog(HttpServletRequest request){
        Assert.notNull(request);
        //获取所有参数方法:
        Enumeration<String> enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String paraName = enu.nextElement();
            logger.trace("ARG : {}={}",paraName,request.getParameter(paraName));
        }
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值