zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    Docker 实战(2)- 在 Jenkins 容器上的搭建持续集成环境和完成自动化测试
    Docker
    Jenkins(9)- 汉化 Jenkins 网站
    Docker 实战(1)- 使用 Jenkins 镜像创建容器,并搭建 Python + Pytest +Allure 的自动化测试环境
    Python
    Docker
    Linux
    Docker(20)- docker rmi 命令详解
    Docker(19)- docker pause/unpause 命令详解
    Docker(18)- docker kill 命令详解
  • 原文地址:https://www.cnblogs.com/wangchaonan/p/10731496.html
Copyright © 2011-2022 走看看