1.前言
项目中日志系统是必不可少的,目前比较流行的日志框架有 log4j
、logback
等,可能大家还不知道,这两个框架的作者是同一个人,Logback
旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外 slf4j
(Simple Logging Facade for Java) 则是一个日志门面框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现。我们本文将讲述如何在spring boot 中应用 logback
+slf4j
实现日志的记录。
2. 为什么使用logback
- Logback 是log4j 框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J
- Logback的定制性更加灵活,同时也是spring boot的内置日志框架
3. logback构成部分
- logback-core:核心代码模块
- logback-classic:log4j的一个改良版本,同时实现了
slf4j
的接口,这样如果之后要切换其他日志组件也是一件很容易的事 - logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
4. 开始使用
spring-boot-starter
中包含了 logback
的依赖,如果使用 springboot
工程,则不需要在进行额外的引入。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.2</version>
</dependency>
logback详细配置信息,可根据实际需要进行一定的删减处理
# 默认名称不用指定配置,修改文件名后需在配置中指定文件
#logging:
# config: classpath:logback-spring.xml
logback-spring.xml
,放在 resources
下
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。
默认值为false。
-->
<!--
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),
命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。
上面是默认的命名规则,并且放在src/main/resources下面即可
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日志配置,这个功能会很有用。
一般不需要这个属性,而是直接在logback-spring.xml中使用springProfile配置,不需要logging.config指定不同环境使用不同配置文件
-->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<!--
此base.xml 在springboot中,包含了default。
Spring Boot的日志系统预先定义了一些系统变量:
base.xml内容如下:
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
,当前进程ID
,Spring Boot配置文件中logging.file的值
, Spring Boot配置文件中logging.path的值
同时默认情况下包含另个appender——一个是控制台,一个是文件,
分别定义在console-appender.xml和file-appender.xml中。
同时对于应用的日志级别也可以通过application.properties进行定义
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
-->
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--
设置变量: <property> 用来定义变量值的标签,<property> 有两个属性name和value;
name: 变量的名称
value: 的值时变量定义的值。
通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“