SpringBoot-04- SpringBoot日志(SLF4j+Logback)

市面上虽然有很多日志处理机制,但是SLF4j+Logback其功能强大、使用简便的优势,受到越来越多的开发者青睐。
而且SpringBoot底层默认使用的是SLF4j+Logback日志,它会自动依赖这两个包,不需要我们配置。
SpringBoot-04- SpringBoot日志(SLF4j+Logback)_第1张图片
我们在此也介绍这种组合方式开发。

1、pom文件中导入对应的依赖包

tips:如果创建的是web项目,需要导入;如果创建的直接是springbootweb项目,就不需要导入了。
SpringBoot-04- SpringBoot日志(SLF4j+Logback)_第2张图片

<!-- slf4j -->
 <dependency>
	 <groupId>org.slf4j</groupId>
	 <artifactId>slf4j-api</artifactId>
	 <version>1.7.26</version>
</dependency>
 
<!-- logback -->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>

如果是SpringBootweb项目的话不用导入上述依赖,SpringBoot的底层已经依赖好了,见下图:
SpringBoot-04- SpringBoot日志(SLF4j+Logback)_第3张图片
SpringBoot-04- SpringBoot日志(SLF4j+Logback)_第4张图片

2、logback.xml文件配置

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

<?xml version="1.0" encoding="UTF-8"?>
<!-- logback配置
    1. 生产环境禁止输出日志到控制台
       注释 <appender-ref ref="STDOUT" /> 即可
    2. 配置包日志
       配置logger标签即可,name字段为包全路径,lever可控制日志等级
    3. 生产环境下不停机更新日志配置
       scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效
-->
<configuration scan="true" scanPeriod="60000">
 
    <!-- Basic log dir, name config -->
    <!-- 此处的这个路径配置自己创建的-->
    <property name="baseDir" value="D:/logs/JavaDemo"/>
    <property name="demoClassDir" value="demoClass"/>
 
    <!-- DemoClass log -->
    <appender name="DEMO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${baseDir}/${demoClassDir}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${baseDir}/${demoClassDir}/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--只保留最近90天的日志-->
<!--            <maxHistory>90</maxHistory>-->
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--            <totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
    </appender>
 
    <!-- 控制台输出 不需要修改 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
        </encoder>
    </appender>
 
    <logger name="com.spz.demo.java" level="INFO" additivity="true">
        <appender-ref ref="DEMO" />
    </logger>
 
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

3、官方用例

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");
  }
}

4、日志的使用

1、默认配置

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

//记录器
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    void contextLoads() {

        //日志的级别:  由低到高 trace
        //可以调整输出的日志级别:日志只会在这个级别及以后的高级别生效
       logger.trace("这是tract日志.....");
       logger.debug("这是debugger日志.....");
       //springboot默认给我们的使用是info级别,没有指定级别的就用springboot默认级别
       logger.info("这是info日志.....");
       logger.warn("这是warn日志....");
       logger.error("这是error日志....");
    }

日志输出格式:

logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%

%d 表示日期时间
%thread 表示线程名
%-5level 表示从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割
%msg   表示日志消息
%n  表示换行符

实例: 可以自己设置一些输出格式!

logging.level.com.dongxk = trace

#当前项目下生成springboot.Log日志
#logging.file.name = xxxx
# /表示当前磁盘的根路径
# /spring/log表示在当前磁盘根路径下创建spring文件夹和里面的log文件夹,使用spring.log作为默认文件
logging.file.path= /spring/log

# 在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中的日志输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] %-5level %logger{50} - %msg%n

你可能感兴趣的:(SpringBoot)