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
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109