1. SpringBoot日志依赖关系
SpringBoot为了方便日志的整合使用提供两个不同的日志场景启动器:
- spring-boot-starter-logging(默认):使用slf4j+logback
- spring-boot-starter-log4j2:使用slf4j+log4j2
SpringBoot默认采用slf4j+logback的组合形式,springBoot也提供了对JUL、Log4j、Logback提供了默认配置
SpringBoot日志配置有两种方式:
- 使用SpringBoot配置文件配置日志
- 单独新建配置文件进行配置,这个配置文件命名要根据具体使用的日志框架实现(logback使用logback.xml,log4j2使用log4j2.xml)
1)默认导入spring-boot-starter-web依赖就默认引入spring-boot-starter-logging:
2)spring-boot-starter-logging的依赖关系
- 默认底层实现是Logback
- 可以使用JUL和log4j的API,通过桥接器让Logback做具体实现
2. SpringBoot的日志配置
2.1 日志级别的配置
日志级别的两种不同设置:
1)rootLogger日志级别的设置:因为rootLogger是根Logger(继承关系),因此它的修改是全局生效的
logging:
level:
root: 日志级别
2)自定义Logger日志级别的设置:SpringBoot使用组的概念设置自定义Logger
logging:
group:
自定义Logger名称: 包路径或类路径
level:
自定义Logger名称: 日志级别
默认logback五种日志级别:
- trace
- debug
- info
- warn
- error
例:
① 配置文件
logging:
group:
mylogback: com.kxjlog
level:
root: info
mylogback: trace
② 测试
@Test
void contextLoads() {
Logger logger = LoggerFactory.getLogger(SpringbootlogApplicationTests.class);
logger.trace("trace信息");
logger.debug("debug信息");
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
}
③ 输出
2022-11-11 21:48:04.077 TRACE 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : trace信息 2022-11-11 21:48:04.077 DEBUG 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : debug信息 2022-11-11 21:48:04.077 INFO 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : info信息 2022-11-11 21:48:04.077 WARN 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : warn信息 2022-11-11 21:48:04.077 ERROR 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : error信息
2.2 日志格式的配置
SpringBoot默认日志输出格式:
2022-11-11 21:48:04.077 TRACE 16520 --- [ main] c.k.s.SpringbootlogApplicationTests : trace信息
按照输出顺序分别是:
- 日期和时间:毫秒精度,易于排序
- 日志级别:trace,debug,info,warn,error
- 进程ID标识
- --- :用于分隔
- 线程名称:括在括号内
- 记录器名称
- 日志内容
1)日志格式配置信息:
- %d或%date:指定日志的日期。默认是ISO8601的标准日期,默认为yyyy-MM-dd HH:mm:ss:SSS
- %level:指定日志的级别:trace<debug<info<warn<error
- %logger:指定日志输出的包名+类名,{n}可以限定长度 比如:%logger{50}
- %M:指定日志发生时的方法名
- %L:指定日志调用的所在的行,线下运行的时候不建议使用此参数,因为获取代码的行号对性能有损耗
- %m(或%msg):标识日志输出的内容
- %n:日志是否换行
- %thread:打印线程名称
2)彩色编码输出
如果终端支持ANSI,则可以使用颜色输出来提供可读性,可以设置spring.output.ansi.enabled为支持的值以覆盖自动检测
使用%clr转换字配置颜色编码,在最简单的形式中,转换器会根据日志级别为输出着色
| 等级 | 颜色 |
| FATAL | 红色 |
| ERROR | 红色 |
| WARN | 黄色 |
| INFO | 绿色 |
| DEBUG | 绿色 |
| TRACE | 绿色 |
可以通过将其作为转换选项提供来指定应用颜色或样式,例如:要使文本变黄,可以如下设置
%clr(%d{yyyy-MM-dd HH:mm:ss}){yellow}
支持颜色环如下:
blue cyan faint green magenta red tellow ……
例:
logging:
pattern:
console: "%d %clr(%p){cyan} -- %clr([%16t]){blue} %clr([%m]){green} %n"
2.3 日志输出的配置
默认日志是输出到控制台中,但对于项目的后期维护就必须把日志进行持久化存储,为此需要进行输出配置
对于日志文件的使用有很多策略,如:每日记录、分类记录、报警记录等,主要演示如何配置
1)将日志输出到文件
logging:
group:
mylogback: com.kxjlog
level:
mylogback: trace
file: #输出文件配置项
name: stringbootlog.log #文件路径和名称
2)将文件进行拆分
logging:
group:
mylogback: com.kxjlog
level:
mylogback: trace
file:
name: stringbootlog.log
logback:
rollingpolicy:
max-file-size: 2KB
file-name-pattern: bootserver.%d{yyyy-MM-dd}.%i.log
max-history: 7
- rollingpolicy:文件拆分
- max-file-size:指定文件的最大存储量,超过了就进行拆分
- file-name-pattern:拆分后的文件命名,%i表示序列从1开始递增
- max-history:最大日志文件拆分数量,默认为7,当拆分到7个时就对最开始的文件进行内容覆盖
3.SpringBoot替换日志框架
SpringBoot提供了两个日志场景启动器,在Log4j2和Logback之间只能二选一,默认使用的logback
替换为log4j2的pom配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除默认的logging-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
测试:
@Test
void contextLoads() {
Logger logger = LoggerFactory.getLogger(SpringbootlogApplicationTests.class);
logger.trace("trace信息");
logger.debug("debug信息");
logger.info("info信息");
logger.warn("warn信息");
logger.error("error信息");
}
输出:
2022-11-12 00:00:23.489 TRACE 1660 --- [ main] c.k.s.SpringbootlogApplicationTests : trace信息 2022-11-12 00:00:23.489 DEBUG 1660 --- [ main] c.k.s.SpringbootlogApplicationTests : debug信息 2022-11-12 00:00:23.489 INFO 1660 --- [ main] c.k.s.SpringbootlogApplicationTests : info信息 2022-11-12 00:00:23.489 WARN 1660 --- [ main] c.k.s.SpringbootlogApplicationTests : warn信息 2022-11-12 00:00:23.489 ERROR 1660 --- [ main] c.k.s.SpringbootlogApplicationTests : error信息
4. SpringBoot指定配置文件
在一些复杂的日志场景,SpringBoot内部配置文件的配置往往有局限性,这个时候需要自己写配置文件
对于这个问题SpringBoot提供了解决方法:只要给resource类路径下放每个日志框架自己的配置文件即可;springBoot就会读取这些配置来实现日志配置
配置文件名称必须是系统指定:文件名如下
| 日志框架 | 配置文件名 |
| logback | logback-spring.xml,logback-spring.groovy,logback.xml,logback.groovy |
| log4j2 | log4j2-spring.xml,log4j2.xml |
| JUL | logging.properties |
例:
① logback.xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--通用配置项,文件地址-->
<property name="file" value="D://logback"></property>
<!--配置fileappender文件输出-->
<appender name="fileappender" class="ch.qos.logback.core.FileAppender">
<!--指定文件输出地址-->
<file>${file}/logback.log</file>
<!--是否进行追加 默认为true-->
<append>true</append>
<!--配置格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--配置layout格式-->
<pattern>%d{yyyy-MM-dd:HH:mm:ss.SSS} [%thread] %-5level %msg%n</pattern>
</encoder>
</appender>
<!--配置root根节点-->
<root level="info">
<!--引入appender-->
<appender-ref ref="fileappender"/>
</root>
</configuration>
输出:
5. Lombok简化日志操作
在通用的日志操作中需要手动获取Logger对象才能进行操作:
Logger logger = LoggerFactory.getLogger(XXX.class);
Lombok通过@Slf4j注解可以简化操作:
① 导入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
② 简单使用
@SpringBootTest//测试类
@Slf4j
class SpringbootlogApplicationTests {
@Test
void test(){
log.trace("trace信息");
log.debug("debug信息");
log.info("info信息");
log.warn("warn信息");
log.error("error信息");
}
}
③ 输出
2022-11-12 00:06:14.458 TRACE 10192 --- [ main] c.k.s.SpringbootlogApplicationTests : trace信息 2022-11-12 00:06:14.458 DEBUG 10192 --- [ main] c.k.s.SpringbootlogApplicationTests : debug信息 2022-11-12 00:06:14.458 INFO 10192 --- [ main] c.k.s.SpringbootlogApplicationTests : info信息 2022-11-12 00:06:14.458 WARN 10192 --- [ main] c.k.s.SpringbootlogApplicationTests : warn信息 2022-11-12 00:06:14.458 ERROR 10192 --- [ main] c.k.s.SpringbootlogApplicationTests : error信息











Comments | NOTHING