SpringBoot日志框架详解
一. 日志框架介绍在项目的开发中,日志是必不可少的一个记录事件的组件,不管是记录运行情况还是追踪线上问题,都离不开对日志的分析,所以也会相应的在项目中实现和构建我们所需要的日志框架。而市面上常见的日志框架有很多,比如:JCL、SLF4J、Jboss-logging、jUL、log4j、log4j2、logback等等,我们该如何选择呢?通常情况下,日志是由一个抽象层+实现层的组合来搭建的。Spri
一. 日志框架介绍
Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack
二. SLF4J 的使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
elloWorld.class);
logger.info("Hello World");
}
}
三. 统一日志框架的使用
四. Spring Boot 的日志关系
(一)排除其他日志框架
(二)统一框架引入替换包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.13.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.30</version>
<scope>compile</scope>
</dependency>
</dependencies>
从上面的分析, Spring Boot 对日志框架的使用已经是清晰明了了
,我们使用 IDEA 工具查看 Maven 依赖关系,可以清晰的看到日志框架的引用
由此可见, Spring Boot 可以自动的适配日志框架,而且底层使用 SLF4j+ LogBack 记录日志,如果我 们自行引入其他框架,需要排除其日志框架。
五. Spring Boot 的日志使用
日志级别和格式
从上面的分析,发现 Spring Boot 默认已经使用了 SLF4J + LogBack . 所以我们在不进行任何额外操作 的情况下就可以使用 SLF4J + Logback 进行日志输出。
编写 Java 测试类进行测试。
Logger logger = LoggerFactory.getLogger(this.getClass());
/*
测试日志输出
SLF4J 日志级别(从小到大):trace<debug<info<warn<error 只会输出比当前级别更高的级别日志
日志级别:我们是可以进行手动调整级别
*/
@Test
public void testLog(){
// System.out.println();
logger.trace("trace日志....");
logger.debug("debug日志....");
// springboot中,日志的默认级别就是info级别 root级别
logger.info("info日志....");
logger.warn("warn日志....");
logger.error("error日志....");
已知日志级别从小到大为 trace < debug < info < warn < error . 运行得到输出如下。由此可见 Spring Boot 默认日志级别为 INFO.
从上面的日志结合 Logback 日志格式可以知道 Spring Boot 默认日志格式是
至于为什么 Spring Boot 的默认日志输出格式是这样?
我们可以在 Spring Boot 的源码里找到答案。
六. 自定义日志输出
可以直接在配置文件编写日志相关配置
# 日志配置
# 指定具体包的日志级别
logging.level.com.lagou=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
logging .file | logging .path | 例子 | 描述 |
(没有) | (没有) | 仅控制台记录。 | |
具体文件 | (没有) | my.log | 写入指定的日志文件,名称可以是精确 位置或相对于当前目录。 |
(没有) | 具体目录 | /var/log | 写入 spring.log指定的目录,名称可 以是精确位置或相对于当前目录。 |
七. 替换日志框架
因为 Log4j 日志框架已经年久失修,原作者都觉得写的不好,所以下面演示替换日志框架为 Log4j2 的 方式。根据官网我们 Log4j2 与 logging 需要二选一,因此修改 pom如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
更多推荐
所有评论(0)