SpringBoot 日志

1.日志框架

写一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;

给项目中导入具体的日志实现就行;我们之前的日志框架都是实现的抽象层;

常用的日志框架:JUL,JCL,Jboss-logging,Logback,Log4j2 ,Log4j,SLF4J

日志抽象层 日志实现
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j JUL(java.util.logging) Log4j2 Logback

左边选抽象,右边选实现

SLF4J + Logback

Spring Boot的底层是Spring框架,而Spring默认框架是JCL;

SpringBoot选用SLF4J和logback

2.SLF4J使用

1.如何在系统中使用SLF4j

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

应该给系统里面导入slf4j的jar包和logback的实现jar

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

SLF4J用户文档
这里写图片描述

每个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架本身的配置文件

2.遗留问题

如果存在一个a系统(slf4j+logback):Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis

如何统一日志框架slf4j?

  1. 将系统中其他日志框架排除出去

  2. 用中间包来替换原有的日志框架

  3. 导入slf4j的其他实现

Bridging legacy APIs
这里写图片描述

3.SpringBoot日志关系

这里写图片描述

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

SpringBoot使用日志功能:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

底层依赖关系:
这里写图片描述
总结:

  1. SpringBoot底层也是使用slf4j+logback
  2. SpringBoot也把其他日志替换成了slf4j
  3. 中间转换包(如图例)
  4. 如果要引入其他框架?一定要把这个框架的日志依赖移除掉,而且底层
    这里写图片描述
    spring框架用的是commons-logging
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

SpringBoot能自动适配所有的日志,他的底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉

4.日志使用

1.默认配置

SpringBoot默认帮我们配置好了日志

    //记录器
    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void contextLoads() {

        //日志的级别由低到高
        //可以调整输出的日志级别;日志就只会在这个级别以后的高级别生效
        logger.trace("trace日志。。");
        logger.debug("debug日志。。");

        //SpringBoot默认给的是info级别,如果没指定就是springboot默认的root级别
        logger.info("info日志。。。");
        logger.warn("warn日志。。。");
        logger.error("error日志。。");
    }

指定某个包的日志级别logging.level.com.miao=trace

#当前项目下生成springboot.log的文件记录日志,也可以指定位置logging.file=D:/springboot.log
logging.file=springboot.log
#当前磁盘下根路径创建spring文件中log文件夹,使用spring.log作为默认
#logging.path=/spring/log
#控制台输出的日志格式 日期 + 线程号 + 靠左 级别 +全类名50字符限制+消息+换行
logging.pattern.console=%d{yyyy-MM-dd } [%thread] %-5level %logger{50} - %msg%n
#指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} === [%thread] === %-5level %logger{50} - %msg%n

日志输出格式:

#控制台输出的日志格式 
#%d:日期
#%thread:线程号 
#%-5level:靠左 级别 
#%logger{50}:全类名50字符限制,否则按照句号分割
#%msg:消息+换行
#%n:换行
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

2.指定配置

SpringBoot关于logging的官方文档
给类路径下放上每个日志框架自己的配置框架;SpringBoot就不会使用自己默认的配置

logging System Customization
Logback logback-spring.xml ,logback-spring.groovy,logback.xml or logback.groovy
Log4J2 log4j2-spring.xml or log4j2.xml
JDK(Java Util Logging) logging.properties

logback.xml:直接被日志框架识别

logback-spring.xml:日志框架不直接加载日志配置项,由SpringBoot解析日志配置,可以使用springboot的高级springProfile功能

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile><!-- 可以指定某段配置只在某个环境下生效 -->

<springProfile name="dev, staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production"><!-- 可以指定某段配置只在某个环境下生效 -->
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

5.切换日志框架

可以根据slf4j的日志适配图,进行相关切换

slf4j+log4j的方式(不推荐使用)

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

slf4j+log4j2的方式

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

猜你喜欢

转载自blog.csdn.net/sinat_30436087/article/details/80470566