• spring boot 学习(六)spring boot 各版本中使用 log4j2 记录日志


    spring boot 各版本中使用 log4j2 记录日志

    前言

    Spring Boot中默认日志工具是 logback,只不过我不太喜欢 logback。为了更好支持 spring boot 框架,我使用 log4j

    spring boot 各版本与 log4j 的支持情况

    1. spring boot 1.2.X 版本

    spring boot 1.2.X 版本一般建议使用默认日志工具(logback),也可以使用 log4j。
    但,注意的是:Spring Boot 1.2.4.RELEASE包含一个bug,github上关于该问题的解释。所以,当你通过application.properties定义日志级别时,该错误会更改父记录器级别,在最差情况下会更改根记录器级别。虽然这个bug是修复在1.2.6.RELEASE,我建议至少使用1.2.8.RELEASE(如果你想坚持1.2.x)。
    因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题而出现各种奇奇怪怪的bug。

    2. spring boot 1.3.X 版本

    spring boot 从 1.3.X 版本开始支持 slf4j+log4j/log4j2
    * 首先,先解决为什么使用 SL4J Facade?
    对于这个问题,网上已经有许多精彩地点答案了,我就直接附上其中一篇的地址了:为什么要使用SLF4J而不是Log4J
    同时,附上一张工作流程图:
    这里写图片描述

    然后,就是在自己的 springboot 项目中使用 log4j。
    补充一下,由于方法一样,我将slf4j+log4j2放到了1.4.X版本中来应用。


    1.创建一个1.3.X版本的 spring boot 项目(记得排除logback-classic的依赖)。

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
       <exclusions>
          <exclusion>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    

    2.引入 SL4J 依赖。

    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.19</version>
    </dependency>
    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j-impl</artifactId>
       <version>2.5</version>
    </dependency>
    

     3.引入 LOG4J 依赖。

    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
       <version>2.5</version>
    </dependency>
    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
       <version>2.5</version>
    </dependency>
    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-jcl</artifactId>
       <version>2.5</version>
    </dependency>
    

     顺便解释一下,log4j-jcl工件是Apache Log4J Commons Logging Bridge。 如果你打算将Spring Boot application.properties日志配置路由到Log4J文件追加器,那么它是必需的。
    4.添加一个测试Controller

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    public class LoggerController {
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
        @RequestMapping("/mylog")
        public String index(){
            logger.debug("This is a debug message");
            logger.info("This is an info message");
            logger.warn("This is a warn message");
            logger.error("This is an error message");
            return "success";
        }
    }
    

     5.src/main/resources目录下加入log4j.properties配置文件
    这个,与 spring 框架下的 log4j.properties 通常配置一样,我就简单提供一个。

    #LOG4J配置
    #设定root日志的输出级别为INFO,appender为控制台输出stdout,文件输出为file
    log4j.rootLogger=INFO,stdout,file
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n
    
    #只打印级别为ERROR或以上的消息。
    log4j.logger.noModule=FATAL
    
    #对 com.test 包下的配置
    log4j.logger.com.test=DEBUG
    log4j.logger.org.eclipse.jetty=WARN
    log4j.logger.freemarker=WARN
    log4j.logger.com.mchange=WARN
    
    #文件输出配置
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=./log.log
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=5
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%-5p]-[%d{yyyy-MM-dd HH:mm:ss}]-[%c:%L]: %m%n
    

    6.启动项目访问 http://localhost:8080/mylog 就可以在 log.log 文件与控制台中看到日志打印的信息。

    3. spring boot 1.4.X 版本

    从 spring boot 1.4开始的版本就要用log4j2
    1.将上一个项目中有关 log4j 与 slf4j 的有关依赖全部去掉,因为 springboot 已经帮我们集合好了。

        <!--去掉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>
    
          <!--log4j2-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-log4j2</artifactId>
          </dependency>
    

     2.添加 log4j2.xml 文件(与 application.properties 同级)。

    <?xml version="1.0" encoding="UTF-8"?>
    <!--启动项设置为 trace,加载 springboot 启动内部各种详细输出-->
    <Configuration status="trace">
        <Appenders>
            <!--添加一个控制台追加器-->
            <Console name="Console" target="SYSTEM_OUT" follow="true">
                <PatternLayout>
                    <pattern>[%-5p] %d %c - %m%n</pattern>
                </PatternLayout>
            </Console>
            <!--添加一个文本追加器,文件位于根目录下,名为log.log-->
            <File name="File" fileName="log.log">
                <PatternLayout>
                    <pattern>[%-5p] %d %c - %m%n</pattern>
                </PatternLayout>
            </File>
        </Appenders>
        <Loggers>
            <Logger name="com.github" level="debug" />
            <!--记录 qg.fangrui.boot 包及其子包 debug 及其以上的记录,并输出到文件中-->
            <Logger name="qg.fangrui.boot" level="debug">
                <!-- AppenderRef 可以控制文件输出对象-->
                <AppenderRef ref="File" />
            </Logger>
            <!--根记录全部输出到控制台上-->
            <Root level="debug">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
    </Configuration>
    

     3.在 application.properties 中加入配置文件的扫描位置
    logging.config=classpath:log4j2.xml
    4.再次启动并访问 http://localhost:8080/mylog
    控制台输出日志:

    控制台输出
    日志文件:
    日志文件输出

    4. springboot 1.4.1.RELEASE + slf4j + log4j2

    参考项目地址:https://github.com/FunriLy/springboot-study/tree/master/%E6%A1%88%E4%BE%8B2

  • 相关阅读:
    perl get请求发送json数据
    一招教你玩转SQL:通过找出数据的共同属性实现SQL需求
    Uncaught (in promise) Error: Component series.map not exists. Load it first
    python post 参数
    python 发送json数据
    毫秒级从百亿大表任意维度筛选数据,是怎么做到的…
    python 日期处理
    python urlencode urldecode
    在服务器本地监控服务端口命令之ss
    在服务器本地监控服务端口命令之ss
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8108380.html
Copyright © 2020-2023  润新知