springboot整合Logback

Logback介绍

描述

Logback是由log4j创始人设计的另外一种开源日志组件,性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。

Logback主要分三个模块

1、logback-core:其他两个模块的基础模块

2、logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j。API,可以很方便地更换成其它日志系统,如log4j或JDK14 Logging。

3、logback-access:访问模块与Servlet容器(如Tomcat和Jetty)集成提供通过Http来访问日志的功能

Logback读取日志配置文件顺序

系统启动时,logback按照下列顺序加载第一个找到的配置文件:

1、classpath: logback-test.xml

2、classpath: logback.groovy

3、classpath: logback.xml

4、查询com.qos.logback.classic.spi.Configurator接口的实现

5、如果以上均未找到,则加载默认配置。

SpringBoot 配置文件的加载顺序

logback.xml--->application.properties/application.yml--->logback-spring.xml

与SpringBoot集成时,上面的配置文件加载较早,SpringBoot为logback提供了很多扩展(比如节点),这些扩展的加载要晚于上面的配置文件,所以SpringBoot建议使用logback-spring.xml作为配置文件。

使用Logback打印日志

引用依赖

由于 Logback 为 SpringBoot 默认日志框架,所以无需再引用,但对于非spring - boot 项目,可以做如下引用

复制代码
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.12</version>
</dependency>

使用SpringBoot自带的不太方便可以排除SpringBoot自带的依赖,在重新添加依赖

找到依赖,并排除

复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <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>

logback.xml文件标签介绍

configure标签

scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 设置Logback在启动和运行过程是否会打印日志。debug="true"时Logback会在启动时输出其加载的配置文件内容、各个组件的状态等信息,有助于快速定位问题。debug="false"时Logback在启动和运行过程中不会输出其内部的调试信息到控制台,这有助于减少控制台输出的噪音,特别是在生产环境中。

复制代码
<configuration debug="false" scan="true" scanPeriod="10 seconds">
property标签

是的子节点用于定义变量,这些变量可以在配置文件的其他部分被引用,以提供灵活的配置选项。

有两个必要属性name和value。name指定property名称,value指定变量内容。

复制代码
	<property name="LOG_SYSTEM" value="服务名" />
	<property name="LOG_HOME" value="${APP_HOME}/${LOG_SYSTEM}" />

可用于保存日志存储路径

appender标签

是的子节点,是负责写日志的组件。

有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。

复制代码
 <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
       
 </appender>
ConsoleAppender

把日志添加到控制台,有以下子节点:

复制代码
<encoder>:对日志进行格式化。
<target>:字符串 System.out 或者 System.err ,默认 System.out ;


<configuration>  
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
    <encoder>  
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>  
    </encoder>  
  </appender>  
  <root level="DEBUG">  
    <appender-ref ref="STDOUT" />  
  </root>  
</configuration>  
FileAppender

把日志添加到文件,有以下子节点:

复制代码
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。
<prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是false。


<configuration>  
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">  
    <file>testFile.log</file>  
    <append>true</append>  
    <encoder>  
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
    </encoder>  
  </appender>  
  <root level="DEBUG">  
    <appender-ref ref="FILE" />  
  </root>  
</configuration>  
RollingFileAppender

滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:

复制代码
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。
<rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。
<triggeringPolicy>: 告知 RollingFileAppender 合适激活滚动。
<prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制:不支持也不允许文件压缩;不能设置file属性,必须留空。
RollingPolicy

其中rollingPolicy的选项范围:

TimeBasedRollingPolicy

TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:

<fileNamePattern>: 必要节点,包含文件名及"%d"转换符, "%d"可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender 的file子节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。"/"或者""会被当做目录分隔符。

<maxHistory>: 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。

FixedWindowRollingPolicy

FixedWindowRollingPolicy: 根据固定窗口算法重命名文件的滚动策略。有以下子节点:

<minIndex>: 窗口索引最小值

<maxIndex>: 窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。

<fileNamePattern >: 必须包含"%i"例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有log%i.log.zip

TriggeringPolicy

其中triggeringPolicy的选项范围:

SizeBasedTriggeringPolicy

SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:

<maxFileSize>: 这是活动文件的大小,默认值是10MB。
eg: 每天生成一个日志文件,保存30天的日志文件。

复制代码
<configuration>   
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">   
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">   
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>   
      <maxHistory>30</maxHistory>    
    </rollingPolicy>   
     <encoder>   
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
    </encoder>   
  </appender>    
  <root level="DEBUG">   
    <appender-ref ref="FILE" />   
  </root>   
</configuration>  

eg: 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。

复制代码
<configuration>   
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">   
    <file>test.log</file>      
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">   
      <fileNamePattern>tests.%i.log.zip</fileNamePattern>   
      <minIndex>1</minIndex>   
      <maxIndex>3</maxIndex>   
    </rollingPolicy>      
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   
      <maxFileSize>5MB</maxFileSize>   
    </triggeringPolicy>   
    <encoder>   
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
    </encoder>   
  </appender>              
  <root level="DEBUG">   
    <appender-ref ref="FILE" />   
  </root>   
</configuration>  
其他appender

还有SocketAppender、SMTPAppender、DBAppender、SyslogAppender、SiftingAppender,并不常用,这些就不在这里讲解了,大家可以参考官方文档。当然大家可以编写自己的Appender

asyncAppender 定义了异步输出日志的方式,对于高并发时,可以使用异步输出来提高系统的性能

复制代码
<!--异步输出日志信息-->
<appender name="asyncFile" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>256</queueSize>
    <appender-ref ref="file"/>
</appender>
encoder标签

**encoder:**负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。

目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个节点,用来设置日志的输入格式。使用"%"加"转换符"方式,如果要输出"%",则必须用""对"%"进行转义。

复制代码
<encoder>   
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
</encoder>
logger标签
复制代码
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息。默认是true。


<logger name="org.springframework.web" level="info"/>
<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>

用处: 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:

复制代码
把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别
root标签

root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性

level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG,可以包含零个或多个元素,标识这个appender将会添加到这个logger。

复制代码
 <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
 </root>

添加链接描述

相关推荐
LiRuiJie14 分钟前
深入剖析Spring Boot / Spring 应用中可自定义的扩展点
java·spring boot·spring
Funcy29 分钟前
XxlJob 源码分析03:执行器启动流程
后端
豌豆花下猫2 小时前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai
尚学教辅学习资料2 小时前
Ruoyi-vue-plus-5.x第五篇Spring框架核心技术:5.1 Spring Boot自动配置
vue.js·spring boot·spring
晚安里3 小时前
Spring 框架(IoC、AOP、Spring Boot) 的必会知识点汇总
java·spring boot·spring
秋难降3 小时前
SQL 索引突然 “罢工”?快来看看为什么
数据库·后端·sql
上官浩仁3 小时前
springboot ioc 控制反转入门与实战
java·spring boot·spring
Access开发易登软件4 小时前
Access开发导出PDF的N种姿势,你get了吗?
后端·低代码·pdf·excel·vba·access·access开发
叫我阿柒啊4 小时前
从Java全栈到前端框架:一位程序员的实战之路
java·spring boot·微服务·消息队列·vue3·前端开发·后端开发
中国胖子风清扬4 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust