zoukankan      html  css  js  c++  java
  • SpringBoot 集成Log4j、集成AOP

    集成Log4j

    (1)在pom.xml中添加依赖

            <!--去掉springboot默认的日志-->
            <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>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>

    springboot默认使用自带的日志,需要先去掉自带的spring-boot-starter-logging,我们引入的log4j才会起作用。

    (2)在resources下新建log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout,D
    
    
    # MyBatis logging configuration...
    log4j.logger.org.mybatis.example.BlogMapper=TRACE
    
    
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.Threshold = DEBUG
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    
    
    # File output...
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    #相对路径,相对于tomcat的根目录。
    #log4j.appender.D.File = ../logs/error.log
    log4j.appender.D.File = D:/logs/error.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
    log4j.appender.D.encoding=UTF-8

    springboot官方推荐日志配置的文件名以-spring结尾,log4j-spring.properties。当然,使用log4j.properties也行。

    至此已经集成log4j,springboot会自动使用log4j来管理日志。

    我们可以手动输出日志:

            Logger logger = Logger.getLogger(UserController.class);  //传入当前类的class对象
            logger.debug("This is debug message.");
            logger.error("This is error message.");
      

    Logger一般写成成员变量的形式,方便在此类的所有方法中使用:

    private Logger logger = Logger.getLogger(UserController.class);

    注意导入的Logger是:

    import org.apache.log4j.Logger;

    不要导错了。

    如果需要统一记录日志,比如记录每个请求的请求参数、ip,在每个controller中都写Logger,很麻烦,这就需要使用AOP拦截每个请求。


    集成AOP

    (1)pom.xml中引入依赖

            <!--aop的起步依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    (2)新建包com.chy.aspect,包下新建切面RequestLogAspect

    @Aspect
    @Component
    public class RequestLogAspect {
        //Logger对象
        private Logger logger=Logger.getLogger(RequestLogAspect.class);
    
        //定义切入点,拦截所有controller
        @Pointcut("execution(public * com.chy.controller.*.*(..)))")
        public void allController(){};
    
        //前增强,()中是切入点
        @Before("allController()")
        public void requestLog(){
            //获取request对象
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
    
            //请求地址、请求方法、ip
            logger.info("url:"+request.getRequestURI());
            logger.info("http_method:"+request.getMethod());
            logger.info("ip:"+request.getRemoteAddr());
    
            //遍历请求参数
            Enumeration<String> paramNames = request.getParameterNames();
            while (paramNames.hasMoreElements()){
                String paramName = paramNames.nextElement();
                String paramVal = request.getParameter(paramName);
                logger.info(paramName+":"+paramVal);
            }
        }
    
    }

    注意调用的logger中的方法、log4j.properties中设置的文件输出等级,等级不够是不会输出到文件的。

  • 相关阅读:
    分布式事物的解决方法
    bootstrap的其他
    bootstrap表单控件
    多线程编程
    内存管理技术
    PrintWriter用法简析
    JSP内置对象
    Servlet学习应该注意的几点
    GPU渲染管线概述
    再说AutoComplete
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12287297.html
Copyright © 2011-2022 走看看