1.日志框架介绍
在项目的开发中,日志是必不可少的一个记录事件的组件,不管是记录运行情况还是追踪线上问题,都离不开对日志的分析,所以也会相应的在项目中实现和构建我们所需要的日志框架。 而市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等,我们该如何选择呢? 通常情况下,日志是由一个抽象层+实现层的组合来搭建的。
Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack
2. SLF4J的基本使用
SLF4J官网地址: SLF4J Manual
简单实例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DemoService {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(DemoService.class);
logger.info("Hello World");
}
}
3. 统一日志框架的使用
在引入不同的包是可能会出现多个不同的日志框架,那么SpringBoot是怎么做的统一日志框架
可以看到SpringBoot依赖默认使用的logback 的,并且加入了log4j和java远程日志框架转 SLF4KJ的中间包
这里可以看到SpringBoot排除了其他日志框架的依赖
统一日志框架的使用流程:
1. 排除系统中的其他日志框架。
2. 使用中间包替换要替换的日志框架。
3. 导入我们选择的日志框架的实现。
4.SpringBoot日志框架的基本使用
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 测试日志输出,
* SLF4J 日志级别从小到大trace,debug,info,warn,error *
*/
@SpringBootTest
public class demo {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
void demo() {
logger.trace("Trace 日志...");
logger.debug("Debug 日志...");
logger.info("Info 日志...");
logger.warn("Warn 日志...");
logger.error("Error 日志...");
}
}
已知日志级别从小到大为 trace < debug < info < warn < error . 运行得到输出如下。由此可见 Spring Boot INFO
从上面的日志结合 Logback 日志格式可以知道 Spring Boot 默认日志格式是
#%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n。
# %d{yyyy-MM-dd HH:mm:ss.SSS} 时间
# %thread 线程名称
# %-5level 日志级别从左显示5个字符宽度# %logger{50} 类名
# %msg%n 日志信息加换行
5.自定义日志输出
可以在配置文件编写日志文件相关配置
# 日志配置
# 指定具体包的日志级别
logging.level.com.zql=debug
# 控制台和日志文件输出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
# 日志输出路径,默认文件spring.log
logging.file.path=spring.log
#logging.file.name=log.log