zoukankan      html  css  js  c++  java
  • springboot-实现log4j的AOP切面

    参考链接:

    https://www.cnblogs.com/liaojie970/p/7883687.html

    https://blog.csdn.net/autfish/article/details/51184405

    1、添加相关依赖

    <!--移除spring boot自带logging-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <exclusions>
            <exclusion>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
    
        <!--添加log4j依赖-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-log4j</artifactId>
          <version>1.3.7.RELEASE</version>
        </dependency>
    
        <!--添加aop切面依赖-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-aop</artifactId>
          </dependency>

    2、新增log4j配置文件:

    log4j.rootLogger=INFO,Console,File
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.Target=System.out
    log4j.appender.Console.layout = org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c - %L]%m%n
    
    log4j.appender.File = org.apache.log4j.RollingFileAppender
    log4j.appender.File.File = C:/Users/lijd/Desktop/test/logs/info.log
    log4j.appender.File.MaxFileSize = 10MB
    
    log4j.appender.File.Threshold = ALL
    log4j.appender.File.layout = org.apache.log4j.PatternLayout
    log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c - %L]%m%n

    3、新建AOP切面类:

    package com.springboot.comm;
    
    import org.apache.log4j.Logger;
    import org.aspectj.lang.JoinPoint;
    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.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Enumeration;
    
    @Aspect//作用是把当前类标识为一个切面供容器读取
    @Component
    public class Log4jAOP {
    
        private Logger logger = Logger.getLogger(getClass());
    
        /**
         * execution函数用于匹配方法执行的连接点,语法为:
         * execution(方法修饰符(可选)  返回类型  方法名  参数  异常模式(可选))
         */
        @Pointcut("execution(public * com.springboot.controller..*.*(..))")//Pointcut表示式
        public void webLog() {
    
        }
    
        @Before("webLog()")//标识一个前置增强方法,相当于BeforeAdvice的功能
        public void doBefore(JoinPoint joinPoint) throws Throwable {
            // 接收到请求,记录请求内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            // 记录下请求内容
            logger.info("---------------request----------------");
            logger.info("URL : " + request.getRequestURL().toString());
            logger.info("HTTP_METHOD : " + request.getMethod());
            logger.info("IP : " + request.getRemoteAddr());
            Enumeration<String> enu = request.getParameterNames();
            while (enu.hasMoreElements()) {
                String name = (String) enu.nextElement();
                logger.info("name:" + name + "value" + request.getParameter(name));
            }
        }
        @AfterReturning(returning = "ret", pointcut = "webLog()")//后置增强,相当于AfterReturningAdvice,方法正常退出时执行
        public void doAfterReturning(Object ret) throws Throwable {
            logger.info("---------------response----------------");
            // 处理完请求,返回内容
            logger.info("RESPONSE : " + ret);
        }
    }
  • 相关阅读:
    RabbitMQ
    操作系统复习知识
    计算机网络相关知识复习
    转帖--Linux的文件检索(locate、find、which、whereis)
    go-ioutil
    使用wrk进行压测
    03x01 Java基础语法
    02x03 Hello World!!!
    02x02 环境搭建
    02x01 Java入门
  • 原文地址:https://www.cnblogs.com/lijianda/p/11038018.html
Copyright © 2011-2022 走看看