SpringAOP日志配置

SpringAOP日志配置

配置文件配置

配置spring-mvc.xml

<aop:config proxy-target-class="true" />

      

       <bean id="logInterceptor" class="com.sjzxywlkj.cplife.log.LogInterceptor" />

      

       <!-- 使用xml配置aop -->

<!-- 强制使用cglib代理,如果不设置,将默认使用jdk的代理,但是jdk的代理是基于接口的 -->

       <aop:config>

              <!--定义切面 -->

              <aop:aspect id="logAspect" ref="logInterceptor">

                     <!-- 定义切入点 (配置在com.sjzxywlkj.cplife.controller下所有的类在调用之前都会被拦截) -->

                     <aop:pointcut expression="execution(* com.sjzxywlkj.cplife.controller.*.*(..))"

                            id="logPointCut" />

                     <!--方法执行之前被调用执行的 -->

                     <aop:before method="before" pointcut-ref="logPointCut" /><!--一个切入点的引用 -->

                     <aop:after method="after" pointcut-ref="logPointCut" /><!--一个切入点的引用 -->

              </aop:aspect>

       </aop:config>

日志处理类

package com.sjzxywlkj.cplife.log;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class LogInterceptor {

       private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

       // private static Logger logger =LoggerFactory.getLogger(LogInterceptor.class);

 

       public void before() {

              logger.info("login start!");

              logger.debug("lllllllllllllllllllllll");

              // System.out.println("qqqqqqqqqqqqqqqqqqqqq");

       }

 

       public void after() {

              logger.info("login end!");

              logger.debug("aaaaaaaaaaaaaaaaaaaaaaaaa");

              // System.out.println("wwwwwwwwwwwwwwwwwwwwwwwwwww");

       }

}

log4j.properties日志文件配置

### 设置###

### 日志相应级别debug,输出位置 d,e

log4j.rootLogger = debug,D,E

 

### 输出DEBUG 级别以上的日志到=E://logs/log.log ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

 

### 输出ERROR 级别以上的日志到=E://logs/error.log ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =${webapp.root}/WEB-INF/logs/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]  %m%n

web.xml配置日志

<context-param>

   <param-name>log4jConfigLocation</param-name>

   <param-value>classpath:resources/log4j.properties</param-value>

</context-param>

 

<listener>

   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

注解文件配置

spring-mvc.xml文件配置

方法一

//扫描aop日志处理类

<context:component-scan base-package="com.sjzxywlkj.cplife.log" />

//开启aop

<aop:aspectj-autoproxy proxy-target-class="true" />

方法二

<bean id="logInterceptor" class="com.sjzxywlkj.cplife.log.LogInterceptor"></bean>

<aop:aspectj-autoproxy proxy-target-class="true"/>

日志切面类

package com.sjzxywlkj.cplife.log;

 

import org.aspectj.lang.annotation.After;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

 

@Aspect

@Component

public class LogInterceptor {

    private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

 

    @Before(value = "execution(* com.sjzxywlkj.cplife.controller.*.*(..))")

    public void before() {

        logger.info("login start!");

        System.out.println("lllllllllllllllllllll");

    }

 

    @After(value = "execution(* com.sjzxywlkj.cplife.controller.*.*(..))")

    public void after() {

        logger.info("login end!");

        System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaa");

    }

}

基于自定义注解

配置文件设置

<context:component-scan base-package="com.sjzxywlkj.cplife.log"></context:component-scan>

<context:component-scan base-package="com.sjzxywlkj.cplife.annotation"></context:component-scan>

    <aop:aspectj-autoproxy proxy-target-class="true">

    </aop:aspectj-autoproxy>

l   自定义注解

package com.sjzxywlkj.cplife.annotation;

 

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

 

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Log {

    String oper() default "";

}

l   日志切面类

package com.sjzxywlkj.cplife.log;

 

import java.lang.reflect.Method;

 

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

import org.aspectj.lang.reflect.MethodSignature;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

 

import com.sjzxywlkj.cplife.annotation.Log;

 

@Aspect

@Component

public class LogInterceptor {

    private final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

 

    @Pointcut("@annotation(com.sjzxywlkj.cplife.annotation.Log)")

    public void controllerAspect() {

 

    }

 

    @Before("controllerAspect()")

    public void before(JoinPoint joinPoint) {

        logger.info(getOper(joinPoint));

    }

 

    private String getOper(JoinPoint joinPoint) {

        MethodSignature methodName = (MethodSignature) joinPoint.getSignature();

        Method method = methodName.getMethod();

        return method.getAnnotation(Log.class).oper();

    }

}

l   Controller注入

@Controller

@RequestMapping("/user")

public class UserController {

 

    @Autowired

    private IUserService uService;

    // 用户登录

    @RequestMapping(value = "/login", method = RequestMethod.GET)

    @ResponseBody

    @Log(oper="user login")

    public String login(){

return null;

}

posted @ 2019-04-18 18:35  wangchaonan  阅读(209)  评论(0编辑  收藏  举报