SpringBoot日志框架
项目中开发中日志是必不可少的记录事件的组件,常见的日志框架很多,例如:JCL、SLF4J,Jboss-logging,log4j,log4j2,logback等。
通常,日志是由一个抽象层+实现层的组合来搭建。
抽象层 | 实现层 |
---|---|
JCL(Jakarta Commons Loggin), SLF4J (simple loggin facade for java),jboss-logging | jul(java.util.logging),log4j,logback,log4j2 |
Spring框架默认使用的日志框架JCL,而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");
}
}
下图是SLF4J结合各种框架的示例,SLF4J API永远作为日志框架的门面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6rX3cvo-1625583862652)(SpringBoot日志框架.assets/concrete-bindings.png)]
注意:每个日志的实现框架都有自己的配置文件,在使用SLF4J后,还要使用实现日志框架的配置文件。
统一日志框架
SLF4J官方给的参考例子
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNkHGgT6-1625583862657)(SpringBoot日志框架.assets/legacy.png)]
从图中得到一种统一日志框架的方式,可以使用一种和要替换框架类完全一样的jar进行替换,这样不致于原来的第三方jar报错,而替换的jar其实使用SLF4J API这样项目中的日志替换就可以通过SLF4J API结合自己选择的框架进行日志输出。
统一日志框架步骤归纳:
- 排除系统中的其他日志框架
- 使用中间包替换要替换的日志框架
- 导入选择的SLF4J实现
例如:要用Logback 替换log4j
- 删除log4j的依赖
- 添加log4j-over-slf4j的桥接依赖
- 添加logback依赖