SLF4J日志框架

SLF4J是JAVA生态里面的一个日志门面,可APACHE JAKARTA COMMONs LOGGING(JCL)类似,门面抽象了底层的日志实现,是较新的日志技术的一种模式,API层面尽可能使用门面的API,减少直接对底层具体实现的依赖,便于切换底层的日志实现。
SLF4J和JCL除了API方面的差异外,另一个主要的不同点在于和具体日志实现绑定的时候,SLF4J没采用类加载器的机制,采用的是编译时静态绑定链接的方法。

门面的作用

使用门面和实现分离的模式对于库或者框架来说有直接的优势,在开发库或框架的使用通过仅仅声明门面的依赖,避免具体日志的依赖,从而避免了强制用户对日志实现的使用,也避免了多个不同的库或框架依赖不同的日志实现技术,最后在用户自己的应用中共存在多种日志技术,日志处理不统一的问题。源于这个诉求,JEP 264: Platform Logging API and Service在JAVA 9中被实现,在系统层面上也提供了一个门面,从而JVM内部的日志可以和应用本身的日志可以被底层用户选择的统一的一个日志实现框架处理。
对于末端的应用程序,抛开统一日志处理的需要,从应用程序本身的角度来看,使用门面api还是直接使用日志实现框架的api则都可以,因为一般来说门面api到具体的日志实现间的调用是有成本的,就这中场景来说使用门面api似乎意义不太大。

绑定到具体的日志框架

JAVA里面最流行的日志框架有,jdk1.4开始自带的java.util.logging包,apache 的log4j(log4j目前有两个版本,log4j1.x, log4j2.x,在老一些的项目中可以发现log4j1.x还在被使用),logback(本身直接实现了slf4j的api)。
对于slf4j来说,和特定的日志实现框架的绑定,仅仅是再classpath中增加一个和特定框架实现对应的binding包。
在这里插入图片描述

基本的使用

API使用方面,虽有差异,但概念,基本功能方面各个日志框架都大同小异。

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的api和使用的绑定包是需要保证版本一致的,但slf4j的api本身是在各个版本中是兼容的,也就是在使用一个什么了slf4j api依赖的库时,实际使用的时候并不需要使用和该库当时什么的版本一直的slf4j api。

发布了106 篇原创文章 · 获赞 15 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/skyupward/article/details/102696155