zoukankan      html  css  js  c++  java
  • Springboot使用AOP实现统一处理Web请求日志

    1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置

    2.新建 resources/log4j.properties 

    我的设置为:

    # LOG4Ju914Du7F6E
    log4j.rootCategory=INFO, stdout, file, errorfile
    log4j.category.com.wutongshu=DEBUG, bootfile
    log4j.logger.error=errorfile
    
    # u63A7u5236u53F0u8F93u51FA
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
    
    # rootu65E5u5FD7u8F93u51FA
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.file=logs/all.log
    log4j.appender.file.DatePattern='.'yyyy-MM-dd
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
    
    # erroru65E5u5FD7u8F93u51FA
    log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.errorfile.file=logs/error.log
    log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
    log4j.appender.errorfile.Threshold = ERROR
    log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
    
    # com.springbootu4E0Bu7684u65E5u5FD7u8F93u51FA
    log4j.appender.bootfile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.bootfile.file=logs/my.log
    log4j.appender.bootfile.DatePattern='.'yyyy-MM-dd
    log4j.appender.bootfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.bootfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

    3.然后创建Web层日志切面类,这里我设置的是controller层的所有请求都会打印日志信息

    其中@Order(i)表示AOP切面的优先级

    在切入点前的操作,按order的值由小到大执行
    在切入点后的操作,按order的值由大到小执行

    /**
     * 日志切面类
     */
    @Aspect
    @Component
    @Order(5)
    public class WebLogAspect {
        private Logger logger=Logger.getLogger(getClass());
    
        private ThreadLocal<Long> startTime=new ThreadLocal<>();
    
    
        @Pointcut("execution(public * com.*.*.web.*.*(..))")
        public void webLog(){
    
        }
    
        @Before(value = "webLog()")
        public void doBefore(JoinPoint point){
            startTime.set(System.currentTimeMillis());
    
            logger.info("WebLogAspect.doBefore............");
            ServletRequestAttributes attributes=
                    (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request=attributes.getRequest();
            logger.info("IP : "+request.getRemoteAddr());
            logger.info("URL:" + request.getRequestURL().toString());
            logger.info("HTTP_METHOD:" +request.getMethod());
            logger.info("CLASS_NAME : " + point.getSignature().getDeclaringTypeName()+"."+point.getSignature().getName());
            logger.info("ARGS : " + Arrays.toString(point.getArgs()));
        }
    
    
        @AfterReturning(value = "webLog()",returning = "ret")
        public void doAferReturning(Object ret){
            logger.info("WebLogAspect.doAfterReturning.............");
            logger.info("Resp: " + ret);
            logger.info("Spend Time : " + (System.currentTimeMillis()-startTime.get()));
        }
    }

    4.输入http://localhost:8087/test/hello进行测试

    可看到控制台输出依次打印出IP,URL,请求方法,请求路径,方法入参以及花费的时间

  • 相关阅读:
    第三篇:python函数
    第二篇:数据类型
    第一篇:初识python
    PyTorch教程之Autograd
    PyTorch教程之Tensors
    如何解决Python.h:No such file or directory
    如何解决conda install:command not found问题
    Linux 安装Anaconda 4.4.0
    Linux安装pytorch的具体过程以及其中出现问题的解决办法
    Writing Science 7.10 (The Opening and The Funnel)
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/10900779.html
Copyright © 2011-2022 走看看