Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】

当我们在进行web开发时,经常会用到各种各样的框架,常见的有spring、mybatis、hibernate等等,每个框架底层都有着自己的日志实现,那么难道我们在进行开发时,还需要在使用不同框架的时候使用其对应的API嘛?这将会大大增加我们的开发成本。还有如果我们在后期对项目进行二次开发时,如果要换日志框架,难道还得需要把原本的日志API全部替换掉吗?
此时我们在想,如果每个日志框架能像我们平时开发时面向接口开发多好,所有的日志框架都统一API,但是实现可以各不相同,这样就能解决上面所说到的问题了。
而这种思想模式,我们可以称之为门面模式。顾名思义,就是我们面向开发者的API是相同的,但是实现层还是由每个框架来决定的。
所以,SpringBoot帮我们已经做好了。它的日志门面选用的就是 SLF4J,而日志实现选用的是Logback。
一、SLF4J 的使用 从 SLF4J官网上,我们可以看到详细示例,例如:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }

Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
文章图片

从上图中,我们可以看到,如果log4j和JUL想使用SLF4J作为日志门面,还需要一层适配层。例如,如果要使用 SLF4J 作为 log4j 的门面,就必须引入 slf4j-api.jar 和 slf-4j-log412.jar 的依赖。其中 slf-4j-log412.jar 就是用来做适配的,我们在调用slf4j API 的时候其实是在调用 slf-4j-log412.jar 中的API,而 slf-4j-log412.jar 中的API执行的又是 log4j中的具体方法。
SpringBoot的知识点很多,不只是日志方面的,还有很多方面需要学习的,我这还有很多的学习资料和教程视频,都是Java后端方面的,有需要学习的小伙伴都可以点击进入,暗号:css,还有学习路线图,有需要学习的小伙伴都可以进群,大家一起学习交流!
由于篇幅有限,只能展示其中的一点学习教程,有需要的可以点击进入,暗号:css,可以免费提供的。
Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
文章图片

二、SpringBoot 中日志的使用 (一)SpringBoot整合其他框架日志门面
我们知道,SpringBoot日志是使用SLF4J作为日志门面,但是其他框架肯定也有自己的日志门面,例如 Java Commons Logging ,Jboss Logging 等等,那么如果我想整个项目都使用SLF4j作为日志门面怎么办呢?
不用担心,SpringBoot已经帮我们做了一波偷梁换柱的操作。在没看SpringBoot如何实现之前,我们来看下面这张图:
Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
文章图片

通常,我们依赖的某些组件依赖于SLF4J以外的日志记录API。为了解决这种情况,SLF4J附带了几个桥接模块,这些模块将对log4j,JCL和java.util.logging API的调用重定向,就好像它们是对SLF4J API一样。
所以,我们可以总结一下如何让系统中所有的日志都统一到SLF4J:
  1. 将系统中其他的日志框架先排除出去
  2. 用中间包来代替原有的日志框架
  3. 导入slf4j其它的实现
当我们在构建SpringBoot项目时,引入了一层依赖:
org.springframework.boot spring-boot-starter 2.1.1.RELEASE >compile

这里面就会有一个日志启动器:
org.springframework.boot spring-boot-starter-logging 2.1.1.RELEASE >compile

底层依赖关系:
Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
文章图片

可以看到,springboot底层默认是使用SLF4J+Logback 的方式记录日志,并且把其他的日志框架也替换成了SLF4J。当我们引入其他框架的时候,只需要把这个框架的默认日志依赖移除掉即可,SpringBoot能自动适配所有的日志。
(二)SpringBoot 框架中日志的使用
1、默认配置 SpringBoot 默认帮我们配置好了日志
//记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() {//日志的级别; //由低到高trace

我们也可以在配置文件中修改日志的默认配置:
logging: # 对指定的包调整日志的级别(trace、debug、info、warn、error) level: com: van: warn # 如果不指定路径,则在当前项目下生成springboot.log文件 # 如果指定路径,则在指定路径下生成springboot.log文件 file: springboot.log # 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件 path: /spring/log pattern: # 在控制台指定格式输出日志 console: # 在文件中指定格式输出 file:

2、指定配置
在项目类路径下放上每个日志框架的配置文件,SpringBoot就不会使用自己的默认配置了。下面的这个表格就是对应日志框架在SpringBoot中使用自己的配置文件符合规则的命名。
| Logging System | Customization | | ----------------------- | ------------------------------------------------------------ | | Logback | logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy | | Log4j2 | log4j2-spring.xml or log4j2.xml | | JDK (Java Util Logging) | logging.properties |

最后附上一个常用的自定义日志配置文件(logback-spring.xml):
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n ${LOG_HOME}/swh.log.%d{yyyy-MM-dd}.log30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 10MB

结语: 【Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】】SpringBoot的知识点很多,想要学透,想要学懂,那就必须要花费精力和时间,特别是自学的小伙伴,有时候找对资料和方式很重要。我这整理有很多的Java方面的学习资料,也有针对Java面试的面试资料,只要是有需要的,就可以点击进入,暗号:css,都可以免费提供!
Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
文章图片

    推荐阅读