日志
在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下SpringBoot会使用Logback来实现日志管理。
一、如何记日志
首先,在代码层面,我们不纠结到底用默认的Logback还是Log4j,而是直接用:Slf4j。
为什么不用管具体用Logback还是Log4j,就可以去写代码呢?Slf4j:英文全称:Simple Logging Facade for Java,即:简单日志门面,它并不是一个具体的日志解决方案,实际工作的还是Logback或Log4j这样的日志框架。Slf4j就是23种设计模式中门面模式的典型应用案例。通过Slf4j这样一个门面的抽象存在,让我们在写代码时,只依赖这个抽象的日志操作,而具体的实现会在Slf4j门面调用的时候委托给具体的实现。
日志(log)作用
编程期调试代码
运营期记录信息
记录日常运营重要信息(峰值流量、平均响应时长 •••)
记录应用报错信息(错误堆栈)
记录运维过程数据(扩容、宕机、报警•••)
日志级别
TRACE:运行堆栈信息,使用率低
DEBUG: 程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程报警数据
ERROR:记录错误堆栈信息
FATAL:灾难信息,合并计入ERROR
我们在代码使用Logger打印不同级别的日志
package com.xuezhi.baseController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
public class BasicController {
// 创建记录日志的对象
private static final Logger log = LoggerFactory.getLogger(BasicController.class);
@GetMapping("hello")
public void hello(){
log.debug("debug------");
log.info("info------");
log.warn("warn------");
log.error("error------");
}
}
在yaml中或者通过启动参数 控制输出日志的级别。
root:设置所有包的日志级别
com.xuezhi.BaseController: 自定义指定包下的日志级别 但是一个个包这么设置太麻烦了,不方便维护
我们可以创建分组,然后对每个组设置日志级别
# 开后debug 模式,输出调试信息,常用于检查系统运行状况 只是与boot有关的
#debug: true
# 设置日志级别,root 表示根节点,即整体应用日志级别 所有包
logging:
# 设置分组
group:
g1: com.xuezhi.baseController,com.xuezhi.service,com.xuezhi.dao
g2: com.apple
level:
root: info
# 设置某个包的日志级别
com.xuezhi.baseController: info
# 设置分组对某个组设置日志级别
g1: debug
1.日志用于记录开发调试与运维过程消息
2.日志的级别共6种,通常使用4种即可,分别是DEBUG, INFO, WARN, ERROR
3.可以通过日志组或代码包的形式进行日志显示级别的控制
快速创建日志对象
上一章我们发现创建Logger日志对象,每次都需要手动创建,lombok给我们提供了@Slf4j�注解,在类上使用即可,日志对象 为 log
package com.xuezhi.baseController;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Controller
public class BasicController {
@GetMapping("hello")
public String hello(){
log.debug("debug------");
log.info("info------");
log.warn("warn------");
log.error("error------");
return "";
}
}
日志格式
类名如果太长则采用缩略形式
我们可以通过logging.pattern.console 设置日志的输出格式
%d:日期
%m:消息
%n:换行
%p: 日志级别 ,一般写成 %5p 代表占用5个长度
%clr: 添加颜色,给谁加,就放到谁身上 ,比如 %clr(%5p)。也可以指定颜色只需要在后面写{}即可把颜色写到大括号里面 %clr(cyan),这个颜色不是随便写什么颜色都可以用的,blue cyan faint green magenta red yellow只支持这六中
PID是boot给重写的我们日志没有办法直接获取,放过他
%t: 线程名 boot默认站位16位,我们也可以写成 %16t
%c:类名 %40c:占用40位, %-40c:采用左对齐,%-40.40c: 如果超过40位则截取成40位,%clr(%-40.40c){cyan}
# 开后debug 模式,输出调试信息,常用于检查系统运行状况 只是与boot有关的
#debug: true
# 设置日志级别,root 表示根节点,即整体应用日志级别 所有包
logging:
# 设置分组
group:
g1: com.xuezhi.baseController,com.xuezhi.service,com.xuezhi.dao
g2: com.apple
level:
root: info
# 设置某个包的日志级别
# com.xuezhi.baseController: info
# 设置分组对某个组设置日志级别
g1: debug
pattern:
console: "%d %clr(%5p) ---[%16t] %clr(%-40.40c){cyan} :%m %n"
日志文件
项目上线之后是没有idea控制台给你打印日志的,日志需要打印在日志文件中,但是所有的日志都存在同一个文件中那就太可怕了,所以我们可以设置滚动日志,设置 日志文件的大小,超出这个大小则再生成一个新的日志文件
# 开后debug 模式,输出调试信息,常用于检查系统运行状况 只是与boot有关的
#debug: true
# 设置日志级别,root 表示根节点,即整体应用日志级别 所有包
logging:
# 设置分组
group:
g1: com.xuezhi.baseController,com.xuezhi.service,com.xuezhi.dao
g2: com.apple
level:
root: info
# 设置某个包的日志级别
# com.xuezhi.baseController: info
# 设置分组对某个组设置日志级别
g1: debug
pattern:
console: "%d %clr(%5p) ---[%16t] %clr(%-40.40c){cyan} :%m %n"
# 设置日志文件
file:
name: server.log
logback:
rollingpolicy:
# 设置日志文件的大小,如果日志文件太大电脑就打不开了,window默认40G,这里为了方便演示设置4KB
max-file-size: 4KB
# 如果超过指定大小,自动创建日志文件的名字格式
file-name-pattern: server.%d.%i. log
�