SLF4J(The Simple Logging Facade for Java )是一个简单的日志门面,SLF4J提供了统一的日志api让你可以在部署应用的时候随意更换日志框架。使用时只需要依赖slfj-api-xxx即可。
如:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
hello world例子程序
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: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
这是因为你没有绑定实际的日志框架,以下使用logback为日志框架为例,logback原生实现slf4j的接口,所以没有适配或者转换层,性能会更好,在pom中添加logback日志框架的依赖:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
再次运行正常打印日志。
slf4j在2.0.0版本之后推出了fluent api,使用该api打印日志将会向后兼容slf4j的版本,有兴趣的朋友可以自行了解,这里不展开。
在部署时绑定日志框架
slf4j支持多个日志框架,每个日志都有一个桥接jar包,称之为"SLF4J bindings",部署是只需要更换桥接包和对应的日志框架包即可实现日志框架的切换。以下是桥接包的列表:
jar包 | 对应的绑定的日志框架 | 备注 |
---|---|---|
slf4j-log4j12-1.7.36.jar | log4j | 有安全问题,建议使用reload4j代替, |
slf4j-reload4j-1.7.36.jar | reload4j | log4j原作者开发的在log4j项目上fork出来并修复安全问题的新日志项目,从log4j更换到reload4j不需要更改源代码 |
slf4j-jdk14-1.7.36.jar | JDK 1.4 logging | jdk自带的日志类 |
slf4j-nop-1.7.36.jar | slf4j的NOPLogger类 | slf4j实现的日志类,不打印任何日志 |
slf4j-simple-1.7.36.jar | org.slf4j.impl的SimpleLogger类 | slf4j实现简单的日志类,将所有日志输出到Systrem.err中 |
slf4j-jcl-1.7.36.jar | Jakarta Commons Logging | |
logback-classic-1.2.10.jar(requires logback-core-1.2.10.jar) | logback | 原生实现slf4j接口,性能比其他的好 |
以下这张图描述了slf4j和其他日志框架的关系。