下面是slf4j相关架构。 我们在程序中直接调用的是slf4j api。底层上实现日志功能的组件是logback或者log4j。在日常使用中常常会搭配lombok使用,lombok的功能是处理代码简化,通过注解减少样板代码,比如自动生成getter、setter、构造函数等
Logback 构建在三个主要的类上:Logger,Appender 和 Layout。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。
Logger作为日志的记录器,把它关联到应用的对应的context后,主要用于存放日志对象,也可以定义日志类型、级别。各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各 logger。
Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、 数据库等。
Layout负责把事件转换成字符串,输出格式化的日志信息。
1.logback会在类路径下寻找名为logback-test.xml的文件
2.如果没有找到,logback会继续寻找名为logback.groovy的文件
3.如果没有找到,logback会继续寻找名为logback.xml的文件
4.如果没有找到,将会在类路径下寻找文件META-INFO/services/ch.qos.logback.classic.spi.Configurator,该文件的内容为实现了Configurator接口的实现类的全限定类名
5.如果以上都没有成功,logback会通过BasicConfigurator为自己进行配置,并且日志将会全部在控制台打印出来
导入lombok后在类声明上添加@Slf4j注解,然后就可以在方法中直接使用名为 log 的对象。
import com.cc.liu.entity.MyUser;
import com.cc.liu.mappers.UserMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class ControllerText {
@Resource
UserMapper userMapper;
@RequestMapping("/text")
public String text1() {
log.debug("debug...");
log.info("info...");
log.warn("warn...");
log.error("error...");
return "log";
}
}
日志信息分为以下几个等级:
TRACE:运行堆栈信息,使用率低
DEBUG:程序员调试代码使用
INFO:记录运维过程数据
WARN:记录运维过程报警数据
ERROR:记录错误堆栈信息
FATAL:灾难信息,合并计入ERROR
如果一个给定的logger没有指定一个日志输出等级,那么它就会继承离它最近的一个祖先的层级。root logger(所有logger的老祖)的默认输出等级为DEBUG。
在我们使用springboot时,logger相关配置也可以通过application配置文件来配置:
logging:
#设置日志组
group:
#自定义组名,设置当前组中所包含的包
suke: com.suke.springbootdemo1.controller
level:
# 设置日志级别,root表示根节点,即整体应用日志级别
root: warn
#为对应组设置日志级别
suke: debug
#为对包设置日志级别
com.suke.springbootdemo1.service: debug
下面是默认日志输出信息:
想要将日志信息输入到日志文件中,我们可以在application配置文件中设置:
logging:
file:
name: 目标文件路径
如果不存在目标文件或者路径错误,logback默认会创建该文件和相关目录。