1.日志级别

TRACE < DEBUG < INFO < WARN < ERROR < FATAL
日志级别越低,打印日志信息范围越大;INFO级别的日志可以打印INFO < WARN < ERROR < FATAL的日志。
Debug日志级别可以打印出sql语句

2.普通日志文件配置

2.1 导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter</artifactId>
  4. </dependency>
  5. 注意这个依赖中包含了spring-boot-starter-logging日志依赖

2.2 配置文件

logging:       
  file: /opt/logs/schoolmanager.log
  level:
    root: info
    com.chuxin.schoolmanager.controller: debug

注意:

  • logging.path和logging.file不可以同时配置,同时配置也只有logging.file起效
  • 配置logging.path将会在指定文件夹下面生成spring.log文件,文件名字无法控制
  • springboot默认的日志级别就是info,也就是root默认配置的就是info级别
  • 这个配置即配置了文件日志,有配置了控制台日志。

    3.自定义日志配置

    3.1 步骤

  • 导入pom依赖

  • 在resource根目录下创建logback-spring.xml日志配置文件
  • 在application.yml引入外部配置文件。

logging.config= classpath:logger-test.xml //引入外部配置文件
如果日志配置文件是logback-spring.xml的话就不用引入了,springboot会自动扫描到的。
注意:springboot项目可以分成两种方式启动,一种是tomcat启动,另一种是springboot使用内嵌的tomcat启动。使用tomcat启动时的自定义日志文件名称必须时logback-spring,负责的话时无法加载自定义日志的。

3.2 配置文件讲解

<?xml version="1.0" encoding="UTF-8"?>

<!--
    日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为 WARN,则低于 WARN 的信息都不会输出

    scan:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为true

    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为 1 分钟。

    debug:当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback运行状态。默认值为 false。通常不打印
-->
<configuration scan="true" scanPeriod="2 seconds">
    <!--property用于配置变量,可通过${LOG_PATH} 取对应的值-->
    <property name="LOG_PATH" value="C:/Users/LQC/Desktop/logs"/>

    <!--输出到控制台的日志追加器,当我们设置这个日志后,就会替代tomcat默认的控制台日志
        如果我们不加载这个日志追加器的话,控制台就不会打印日志信息了-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志 appender 是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--这里要是设置成info的话,控制台输出的日志级只能输出info以上的-->
            <!--<level>INFO</level>-->
        </filter>
        <!--日志消息格式与编码-->
        <encoder>
            <Pattern>%date [%-5p] [%thread] %logger{60} [%file : %line] %msg%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到日志文件的日志追加器-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志存放的文件-->
        <File>${LOG_PATH}/schoolmanager.log</File>
        <encoder>
            <!--日志消息格式与编码-->
            <pattern>%date [%-5p] %thread %logger{60} [%file : %line] %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 添加.gz 历史日志会启用压缩 大大缩小日志文件所占空间 -->
            <fileNamePattern>${LOG_PATH}/schoolmanager.log.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory><!-- 保留 30 天日志 -->
        </rollingPolicy>
    </appender>

    <!--选择使用那个apperder日志追加器-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!--单独配置节点,用来具体指明包的日志输出级别  如果不设置,则会交给root配置的appender处理-->
    <!--将该包下的日志交给console的appender处理,additivity设为false表示不再向上传递,如果置为true,则root接到后会再打印一次。 -->
    <logger name="com.chuxin.schoolmanager.mapper" level="DEBUGE" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>

</configuration>

3.3 日志框架命名规范

01-springboot框架集成slf4j日志 - 图1
通过上表可以看到,有些日志框架配置文件在命名时加了个”-spring”,这是因为如果不加”-spring”则该配置文件是由SpringBoot中集成的日志框架直接加载,加载该配置文件时绕过了SpringBoot,加上”-spring”之后的配置文件则是由SpringBoot加载的,这样我们就可以使用SpringBoot为我们提供的更高级的功能,比如profile功能:

1. <springProfile name="dev">
2.     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
3. </springProfile>
4. <springProfile name="!dev">
5.     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern>
6. </springProfile>

如果没加”-spring”,却使用了标签,则会报错,因为日志框架中没有定义该功能:

no applicable action for [springProfile]

4.控制台乱码问题

tomcat启动项目有一个自己的控制台编码,springboot启动项目有一个内嵌tomcat的控制台编码。