JAVA日志
1、常见的日志框架
无具体实现的抽象门面框架:
JCL(Comons logging,Spring框架默认-抽象层)
slf4j(主流java日志抽象层)
Jboss-logging(Hibernate框架默认-抽象层)
具体实现的框架:
JUL(JVM Runtime,java中util包内置日志框架)
log4j(Mybatis框架默认)
log4j2(log4j的修订版)
logback(轻量日志实现)
日志框架及实现 | 介绍 | 抽象or实现 |
---|---|---|
JCL | jcl是apache公司jakarta小组开发的日志框架,不再更新(止步2014),版本较老 | 抽象 |
Jboss-logging | 功能过于高大上,不适合普通程序员使用(平时开发很少用到) | 抽象 |
slf4j(Simple Logging Facade For Java) | 是专门为java打造的一个日志框架(日志抽象层) | 抽象 |
JUL(java.util.logging) | 是java中util包内置的一个日志,是基于log4j的竞争而产生(用着也不赖) | 具体实现 |
Log4j | log4j很强,但是存在一定的性能问题,为了与slf4j整合实现,要大改整个实现功能,但是这样的话还不如重新再写一个 | 具体实现 |
Log4j2 | 后者对其加强修改,升级了log4j,功能太过强大,与现有的日志抽象层框架不易整合 | 具体实现 |
Logback | 正由于log4j存在性能问题,开发者再次开发一个轻量日志实现-logback | |
slf4j和log4j和Logback都是由Ceki Gülcü编写,所以在选择日志抽象层和日志实现时,可以优先考虑 |
常用的组合使用方式是Slf4j与Logback组合使用,Commons Logging与Log4j组合使用。
JDK自带了logging,log4j1、log4j2、logback ,这些框架都自己定制了日志 API ,并且有相应的实现;目前用于实现日志统一的框架 Apache commons-logging、slf4j ,遵循面向接口编程的原则,这两大框架可以让用户在程序运行期间去选择具体的日志实现系统(log4j1\log4j2\logback等)来记录日志,是统一抽象出来的一些接口
日志门面框架
日志门面:是门面模式的一个典型的应用,门面模式,也称外观模式,请参照我的博文设计模式之外观模式,日志门面框架就使一套提供了日志相关功能的接口而无具体实现的框架,其调用具体的实现框架来进行日志记录。也就是说日志门面天然的兼容日志实现框架。典型的日志门面就是Commons Logging、SLF4J。
日志门面的优点:
日志门面是介于具体的日志框架与系统之间的桥梁,通过日志门面框架的应用实现了系统与具体实现日志框架的解耦。无论具体实现的日志框架如何变化,都不会影响系统日志的记录功能,更无须更改系统代码,符合“开放-闭合原则”。
现今,Java日志领域被划分为两大阵营:Commons Logging阵营和Slf4j阵营。
Commons Logging:Apache Commons Logging是一个基于Java的日志记录实用程序,是用于日志记录和其他工具包的编程模型。它通过其他一些工具提供API,日志实现和包装器实现。
SLF4J:Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,以外观模式实现。可以在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有Java Logging API、Log4j及logback等框架。以MIT 授权方式发布。SLF4J 的作者就是 Log4j和Logback 的作者 Ceki Gülcü.
SpringBoot:底层是Spring框架,Spring框架默认是用JCL;
而SpringBoot是选用 SLF4框架j,由logback来实现。
开发过程中,想调用日志记录方法,不应该直接调用实现类(logback)中的方法,而是应该调用日志抽象层(slf4j)的方法。
首先导入slf4j和logback的jar包依赖;
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.5</version>
</dependency>
使用案例:
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");
}
}
参考:
https://baijiahao.baidu.com/s?id=1715746137882792664&wfr=spider&for=pc
https://blog.csdn.net/qq_52596258/article/details/119539867