当我们在进行web开发时,经常会用到各种各样的框架,常见的有spring、mybatis、hibernate等等,每个框架底层都有着自己的日志实现,那么难道我们在进行开发时,还需要在使用不同框架的时候使用其对应的API嘛?这将会大大增加我们的开发成本。还有如果我们在后期对项目进行二次开发时,如果要换日志框架,难道还得需要把原本的日志API全部替换掉吗?一、SLF4J 的使用 从 SLF4J官网上,我们可以看到详细示例,例如:
此时我们在想,如果每个日志框架能像我们平时开发时面向接口开发多好,所有的日志框架都统一API,但是实现可以各不相同,这样就能解决上面所说到的问题了。
而这种思想模式,我们可以称之为门面模式。顾名思义,就是我们面向开发者的API是相同的,但是实现层还是由每个框架来决定的。
所以,SpringBoot帮我们已经做好了。它的日志门面选用的就是 SLF4J,而日志实现选用的是Logback。
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");
}
}
文章图片
从上图中,我们可以看到,如果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,可以免费提供的。
文章图片
二、SpringBoot 中日志的使用 (一)SpringBoot整合其他框架日志门面
我们知道,SpringBoot日志是使用SLF4J作为日志门面,但是其他框架肯定也有自己的日志门面,例如 Java Commons Logging ,Jboss Logging 等等,那么如果我想整个项目都使用SLF4j作为日志门面怎么办呢?
不用担心,SpringBoot已经帮我们做了一波偷梁换柱的操作。在没看SpringBoot如何实现之前,我们来看下面这张图:
文章图片
通常,我们依赖的某些组件依赖于SLF4J以外的日志记录API。为了解决这种情况,SLF4J附带了几个桥接模块,这些模块将对log4j,JCL和java.util.logging API的调用重定向,就好像它们是对SLF4J API一样。
所以,我们可以总结一下如何让系统中所有的日志都统一到SLF4J:
- 将系统中其他的日志框架先排除出去
- 用中间包来代替原有的日志框架
- 导入slf4j其它的实现
org.springframework.boot
spring-boot-starter
2.1.1.RELEASE
>compile
这里面就会有一个日志启动器:
org.springframework.boot
spring-boot-starter-logging
2.1.1.RELEASE
>compile
底层依赖关系:
文章图片
可以看到,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}.log 30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB
结语: 【Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】】SpringBoot的知识点很多,想要学透,想要学懂,那就必须要花费精力和时间,特别是自学的小伙伴,有时候找对资料和方式很重要。我这整理有很多的Java方面的学习资料,也有针对Java面试的面试资料,只要是有需要的,就可以点击进入,暗号:css,都可以免费提供!
文章图片
推荐阅读
- 面试|SpringBoot学习笔记
- 前端|前端 HTML基础
- Java入门基础|Java入门基础第4天《Java编程规范及编译源代码常见错误的解决方法》
- Java入门基础|Java入门基础第3天《使用记事本编写运行Java程序》
- Java入门基础|Java入门基础第2天《java jdk下载与安装教程》
- 1161. 最大层内元素和 : 层序遍历运用题
- vue|【实战篇】使用 Vue3 + Ts + Egg 开发一个ProTable(包含接口实现)
- 技术分享|使用 SpringBoot + Redis + Vue3 + ArcoPro 开发管理系统
- java|Eureka 时代之后的 Consul