slf4j简介
SLF4J(Simple logging facade for Java)不是具体的日志解决方案,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志类库。
按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。
如果是在编写供内外部都可以使用的API或者通用类库,那么你真不会希望使用你类库的客户端必须使用你选择的日志类库。
如果你的一个项目中已经使用了log4j,而你现在加入了一个新的类库,比方说加入了 Apache Active MQ——而它依赖于另外一个日志类库logback,那么你就需要把它logback也加载进你的项目中去。
但如果Apache Active MQ使用了SLF4J,那么你可以继续使用你的日志类库log4j,而无需忍受要同时加载和维护log4j和logback这两日志框架的内伤。
总的来说,SLF4J使你的代码独立于任意一个特定的日志API,这是一个对于开发API的开发者很好的思想。虽然抽象日志类库的思想已经不是新鲜的事物而且Apache commons logging也已经在使用这种思想了,但现在SLF4J正迅速成为Java世界的日志标准。
简单来说:
SLF4J是为了解决一个项目要维护多个日志系统的问题。
绑定一个日志框架
正如上面所说的, SLF4J 支持各种日志框架。 SLF4J 发布了几个称为 SLF4J 绑定”SLF4J bindings”的jar包 , 它们每个分别绑定了日志的实现。
绑定包 | 说明 |
---|---|
slf4j-log4j12-1.7.24.jar | 绑定了log4j 1.2版 |
slf4j-jdk14-1.7.24.jar | 绑定了java.util.logging, 也就是JDK 1.4的日志系统。 |
slf4j-nop-1.7.24.jar | 没有绑定任何东东, 所有的日志都不输出。 |
slf4j-simple-1.7.24.jar | 绑定了一个最简单的实现, 所有的事件都是通过System.err进行输出,只打印输出INFO或以上级别的日志。 |
slf4j-jcl-1.7.24.jar | 绑定了Jakarta Commons Logging。 |
logback-classic-1.0.13.jar | 原生实现SLF4J,ch.qos.logback.classic.Logger 类直接实现了SLF4J的org.slf4j.Logger接口。slf4j的默认实现是logback。 |
.
1.slf4j+log4j
使用log4j做为底层日志工具,需要三个架包:
- slf4j-api-x.x.x.jar
- slf4j-log4j12-x.x.x.jar
- log4j-1.2.xx.jar
2.slf4j+logback
Logback和log4j是非常相似的。
Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小。
搭建logback需要3个架包:
- slf4j-api-1.6.x.jar
- logback-core-0.9.21.jar(目前已经有1.0.0)
- logback-classic-0.9.21.jar(目前已经有1.0.0)
3.log4j2
- log4j-core-xx.jar
- log4j-api-xx.jar
我们知道,要在某个类中使用log4j记录日志,只需要申明下面的成员变量(其实不一定要是成员变量,只是为了方便调用而已),log4j 2.0的使用非常简单,只要用LogManager的getLogger函数获取一个logger,就可以使用logger记录日志。
private static Logger logger = LogManager.getLogger(MyApp.class.getName());
Maven 引入日志框架
logback
使用logback实现日志系统
将会自动依赖:
- slf4j-api-1.7.22.jar
- logback-core-1.2.1.jar
- logback-classic-1.2.1.jar
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
log4j
使用log4j实现日志系统
将会自动依赖:
- slf4j-api-1.7.24.jar
- slf4j-log4j12-1.7.24.jar
- log4j-1.2.17.jar
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.24</version>
</dependency>
java.util.logging
使用java.util.logging实现日志系统
将会自动依赖:
- slf4j-api-1.7.24.jar
- slf4j-jdk14-1.7.24.jar
<!-- java.util.logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.24</version>
</dependency>