1. 简述
Spring Boot
支持java.util.logging
、Log4j
、Logback
等作为日志框架,其中,Logback
作为默认日志框架。无论使用哪种日志框架,Spring Boot
都支持配置将日志输出到控制台或者文件中。
1.1 日志框架
常见的日志框架: JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....
日志(接口层) | 日志实现 |
---|---|
JCL(Jakarta Commons Logging): 最后一次更新是2014年 SLF4j(Simple Logging Facade for Java) jboss-logging: 使用场景少 |
Log4j JUL(java.util.logging) Log4j2 Logback |
推荐使用日志接口:
SLF4j
; 推荐使用日志实现层:Logback
,SpringBoot
默认也是使用SLF4J+Logback
2. Logback介绍
2.1 组成成员
logback-core
: 属于Logback
的基础模块,是其他两个模块的基础。logback-classic
: 可以看作Log4j
的改进版本,同时logback-classic
自身实现了SLF4J API
,使开发者可以在Logback
框架与其他日志框架(如Log4j
或java.util.logging
)之间自由切换。logback-access
: 与Servlet
容器(如Tomcat
和Jetty
)集成,以提供HTTP
访问日志功能。
2.2 日志级别
Logback
的日志级别有: trace、debug、info、warn、error
,
级别排序为:trace <debug <info < warn < error
。
2.3 依赖引入
一般情况下,我们不需要单独引入spring-boot-starter-logging
这个依赖了,因为这是spring-boot-starter
默认引入的依赖其依赖如下:
从上面的依赖树,我们可以看出,
spring-boot-starter-logging
依赖logback-classic, logback-classic
依赖logback-core、sl4j-api
。
3. 在SpringBoot中使用
3.1 基于记录器使用
|
运行输出:
原因:SpringBoot默认使用info级别。
解决方法: 通过logging.level设置;如下面配置
|
3.2 基于注解使用
如果每一个类都需要初始化一个Logger(记录器),不但会觉得很烦也会让别人觉得自己很low,幸好有个第三方插件(lombok
)可以帮助我们做这些事,只需要使用lombok的@Slf4j注解即可。
1. 引入lombok
|
2. 使用
|
4.写入文件
默认情况下,Spring Boot
只会将日志消息打印到控制台,并不会将日志写入日志文件。但是在实际项目中,一定会需要日志文件来分析程序。其实在Spring Boot
工程中,想要输出控制台之外的日志文件很简单,只需要在application.properties
文件或application.yml
文件内设置logging.file.path
或logging.file.name
属性即可。
从SpringBoot2.2版本以后,logging.path
重命名为: logging.file.path
;logging.file
重命名为: logging.file.name
4.1 写入文件配置
logging.file.name
: 设置日志文件,这里可以设置文件的绝对路径,也可以设置文件的相对路径,具体可以根据情况设置,如logging.file.name=test.log
。logging.file.path
: 设置日志目录,在设置好目录后,会在设置目录文件夹下创建一个spring.log
,如设置logging.file.path=/Users/liuqh
。
logging.file.name | logging.file.path | Example | Description |
---|---|---|---|
(none) | (none) | 只在控制台输出 | |
指定文件名 | (none) | my.log | 输出日志到my.log文件 |
(none) | 指定目录 | /var/log | 输出到指定目录的 spring.log 文件中 |
上述两个属性中,如果只设置一个,那么
Spring Boot
应用会默认读取该配置;如果同时设置,那么只有logging.file.name
会生效。
5. 输出格式
5.1 输出格式语法
|
5.2 基于SpringBoot配置
|