日志主要用于记录程序运行的情况。我们从学习javase的时候就使用System.out.println();打印日志了,通过打印的日志来发现和定位问题,或根据日志来分析程序运行的过程。在Spring的学习中,也经常根据控制台的⽇志来分析和定位问题 。
日志除了发现和定位问题,还可以进行系统监控,数据采集和日志审计。
系统监控:统计⽇志中关键字的数量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀
数据采集:统计⻚⾯的浏览量(PV),访客量(UV),点击量等,根据这些数据进⾏数据分析,优化公司运营策略
日志审计:一条记录的删除或修改 ,通过日志记录是谁操作的,如果出现内部的违规和信息泄露现象后,为时候追查提供依据。⼀些公司查看客⼾的信息都会被记录⽇志,如果频繁查询也会报警
@RestController
public class LoggerController {
//1.定义日志对象
private Logger logger = LoggerFactory.getLogger(LoggerController.class);
@PostConstruct
public void print(){
System.out.println("打印日志");
logger.info("=====我是使用日志框架打印日志=====");
}
}
打印结果:
使⽤⽇志对象打印⽇志的结果显示的信息比System.out.println();要全。日志对象打印的日志包括:时间,级别,进程ID,线程,打印日志的类,日志内容。
日志对象的名称,通常情况下,是当前类,可能为缩写。
日志框架使用的SLF4J 。SLF4J 并不是一个真实的日志实现,而是日志的门面。不能独立使用,需要搭配具体的实现日志比如:log4j/2,或者logback。
SLF4J 是外观模式(门面模式)的典型应用,注意SLF4J 并不是只有外观模式。
门面模式(FacadePattern)又称为外观模式,提供了一个统一的接口,用来访问子系统的一群接口。其主要特征是定义了⼀个高层接口,让子系统更容易使用.
门面模式的优点:
⽇志的级别从⾼到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
• FATAL:致命信息,表⽰需要⽴即被处理的系统级错误.
• ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏.
• WARN:警告信息,不影响使⽤,但需要注意的问题
• INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等.
• DEBUG:调试信息,需要调试时候的关键信息打印.
• TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)
日志级别的使用:
@Slf4j
@RestController
public class LoggerController {
//1.定义日志对象
private Logger logger = LoggerFactory.getLogger(LoggerController.class);
@PostConstruct
public void print(){
logger.info("=====我是使用日志框架打印日志=====");
logger.error("我是error日志");
logger.warn("我是warn日志");
logger.info("我是info日志");
logger.debug("我是debug日志");
logger.trace("我是trace日志");
}
}
输出结果:
因为spring默认的日志级别是info.只能输出比info高的日志信息。所以我们上面的输出结果中debug和trace没有输出。
要想输出日志级别比info低的需要进行日志配置
其他配置可以查看:常见的 Application Properties (springdoc.cn)
配置日志级别为debug:
logging:
level:
root: info # 全局目录的级别
com:
bite:
demo: debug # 指定目录日志的级别
日志的持久化(就是把日志保存在文件中):
logging:
file:
name: logger/ioc.log
日志分割:
logging:
logback:
rollingpolicy:
max-file-size: 1KB # 分割日志文件的大小
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i # 日志文件分割的名称定义规则
配置日志格式:
logging:
console: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n' # 控制台格式
file: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n' # 文件格式
先添加lombok依赖。然后在类上添加@Slf4j注解
@Slf4j
@RestController
public class LoggerController {
@PostConstruct
public void print(){
log.info("=====我是使用日志框架打印日志=====");
log.error("我是error日志");
log.warn("我是warn日志");
log.info("我是info日志");
log.debug("我是debug日志");
log.trace("我是trace日志");
}
}