Springboot-logging总结
1、简介
日志帮助我们调试程序而自动打印信息,跟踪数据,并对问题进行打印以及排查,springboot也为我们整合了日志系统,供我们进行配置使用。
我们一般使用system.out.println();进行信息的打印输出,帮助我们查找问题。但是在性能方面,以及效率方面都不高,因此在spring-boot-starter中帮我们自动导入了spring-boot-starter-logging日志包。
2、初始化日志
1、导包,spring-boot-starter-logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.5.1</version>
</dependency>
2、在类中新建Logger类
XXX为该类的类名
private static final Logger log = LoggerFactory.getLogger(XXX.class);
3、通过log对象调用不同日志级别的方法
日志优先级 : trace > debug > info > warn > error 默认为info
slf4j为日志接口,实现类为 log4j 和 logback 默认为logback
@RequestMapping("/log")
public String getInfo(){
log.trace("=========trace============");
log.debug("=========debug============");
log.info("=========info============");
log.warn("=========warn============");
log.error("=========error============");
return "log success";
}
**4、测试:localhost:8080/log **
5、查看控制台打印日志信息
证明:默认springboot2.x 版本的logback日志级别为Info,将小于该日志级别的日志信息也都会一同打印出来
3、日志优先级的修改
yml文件中直接写配置
1、全局日志级别修改
#设置为debug级别
logging:
level:
root: debug
2、局部日志级别修改
#给com.llj包下的所有类的日志等级设置为trace
logging:
level:
com:
llj: trace
4、Lombok方式配置日志
Lombok定义了几种日志注解:@Log4j @Log4j2 @Slf4j @Log等,但我们只用一个就够了。
1、直接给相应的类添加注解 :@Log4j2
2、设置日志文件地址及日志格式:
logging:
level:
root: info
file:
#默认path将日志放在logging.file.path的目录下,日志名是:spring.log
path: output/logs
# 如果不想把日志存放在logging.file.path目录下,可以用name定义存储的路径和日志文件的名称
#name: d:/output/logs/console.log
#日志输入格式:
pattern:
console: "%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50}- %msg%n"
file: "%d{yyyy/MM/dd-HH:mm:ss} ---- [%thread] %-5level %logger{50}- %msg%n"
日志格式配置详情(日后再研究)
%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置, 包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{pattern}{regex}{substitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution
3、设置可以自定义注入属性的日志
log.info("我的名字是{},我的年龄是{}", user.name, user.age);
未完,待续…