文章目录
Spring Boot 日志
5.1 日志用途
- 系统监控:通过日志记录这个系统的运行状态,每个方法的响应时间,响应状态等.对数据进行分析,超过阈值时报警等
- 数据采集,如数据统计(统计浏览量,访客量等等),推荐排序(采集数据判断用户喜好)
- 日志审计,可以判定一些非法攻击,非法调用等等
5.2 日志使用
我们可能最常用的是System.out.println()
来打印,但是实际上这种方式缺少了许多信息
SpringBoot内置了日志框架slf4j
,可以直接调用
5.2.1 打印日志
得到日志对象
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
- Logger对象是属于org.slf4j包下的
LoggerFactory.``_getLogger_
需要传递一个参数,标识这个日志的名称,就能更加清楚地知道是哪个类输出的日志
使用日志对象打印日志
@RestController
public class LoggerController {
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/logger")
public String logger() {
logger.info("=========Test Log=========");
return "Test Log";
}
}
5.3 日志格式
日志显示的内容有:
- 时间日期
- 日志级别(ERROR,WANR,INFO,DEBUG,TRACE)
- 进程ID
- 线程名
- logger名
- 日志内容
5.4 日志级别
日志级别代表着日志信息对应问题的严重性,为了更快的筛选目标的日志信息
分类
日志级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE
- FATAL:致命信息,表示需要被立即处理的系统级别错误
- ERROR:错误级别,级别比较高的错误日志信息,但不影响系统的继续运行
- WARN:警告信息,不影响使用,但需要注意的问题
- INFO:普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等
- DEBUG:调试信息,需要调试时候的关键信息打印
- TRACE:追踪信息,比BEBUG更加细粒度的信息时间
使用
针对不同的日志级别,Logger对象分别提供了对应的方法,来输出日志
@RestController
public class LoggerController {
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/logger2")
public void logger2() {
logger.trace("========= trace =========");
logger.debug("========= debug =========");
logger.info("========= info =========");
logger.warn("========= warn =========");
logger.error("========= error =========");
}
}
但是实际上只是打印了INFO以上的级别的日志
这与日志的配置有关,日志的输出默认级别是info级别
5.5 日志配置
配置日志级别
配置日志级别只需要在配置文件中设置"logging.level"配置项即可:
logging.level.root=debug
此时日志就能打印debug以上级别的日志了
但是此时我们会发现spring boot自带的debug级别的日志也都显示出来了,我们可以设置单独某一个地方的日志:
日志持久化
我们通常需要将日志保存起来.以便出现问题之后追溯,日志持久化有两种方式:
- 配置日志文件名
- 配置日志的存储目录
配置日志的路径和文件名
logging.file.name=logger/springboot.log
运行后可以看到:
路径就会存储在这里面
配置日志文件的保存路径
logging.file.path=D:/temp
注意:logging.file.name
和logging.file.path
两个都配置的情况下,只生效其一.以logging.file.name
为准
配置日志文件分割
如果我们的日志文件都放在同一个文件,那么随着项目的运行,日志文件会越来越大,需要对日志文件进行分割
默认日志文件超过10M就会进行分割
logging.logback.rollingpolicy.max-file-size=2KB
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.zip
配置日志格式
默认的日志格式是这样的
这些内容都是可以配置的,支持控制台配置和日志文件配置
配置控制台日志格式配置logging.pattern.console
默认值是:
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}}){faint}%clr(${LOG_LEVEL_PATTERN:-
%5p})%clr(${PID:-}){magenta}%clr(---){faint}%clr([%15.15t])
{faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
配置日志文件的日志格式logging.pattern.file
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}}${LOG_LEVEL_PATTERN:-%5p}${PID:-}
---[%t]%-40.40logger{39}:
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
配置项说明:
%cir
(表达式)(颜色):设置输出日志的颜色
支持的颜色有:blue,cyan,faint,green,magenta,red,yellow
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}
:日期和时间–精确到毫
秒
-
%5p
显示日志级别ERROR,WARN,INFO,DEBUG,TRACE -
%t
线程名.%c
全限定类名.%m
method.%L
为行号.%thread
线程名.%m
或者%msg
显示输出消息.%n
换行符
%5
若字符长度小于5,则右边用空格填充.%-5
若字符长度小于5,则左边⽤空格填充.%.15
若字符长度超过15,截去多余字符.%15.15
若字符长度小于15,则右边用空格填充.若字符⻓度超过15,截去多余字符
实际上通常情况下,使用默认的日志输出格式即可
5.6 更简单的日志输出
lombok给我们提供了更加简单的方式
- 添加lombok依赖
- 使用
@slf4j
注解输出日志
@Slf4j
@RestController
public class LoggerController {
@RequestMapping("/logger")
public String logger() {
log.info("=========Test Log=========");
return "Test Log";
}
@RequestMapping("/logger2")
public void logger2() {
log.trace("========= trace =========");
log.debug("========= debug =========");
log.info("========= info =========");
log.warn("========= warn =========");
log.error("========= error =========");
}
}
我们查看idea反编译的字节码:
实际上就是 lombok提供的@Slf4j
会帮我们提供一个日志对象log,直接使用即可