每次用到Slf4j都麻烦一阵,尽管很方便,但是让很多人搞不明白。
其实Slf4j原理很简单,他只提供一个slf4j api(就是slf4j-api.jar包),这个包只有日志的接口,并没有实现,所以要使用得给它提供一个实现了些接口的日志包,比如:log4j,common logging,jdk log等,但是这些日志实现又不能通过接口直接调用,实现上他们根本就和slf4j-api不一致,因此slf4j又增加了一层来转换各日志实现包的使用,当然slf4j-simple除外。其结构如下:
slf4j-api(接口层)
|
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
|
各日志实现包
下面这个图更能说明其原理:
[img]http://www.slf4j.org/images/bindings.png[/img]
在这里还需要注意的是,连接层的jar包和实现的jar的版本要一致。
slf4j-simple最简单:
它只要slf4j-api-1.5.6.jar和slf4j-simple-1.0.jar两个包即可。
其实Slf4j原理很简单,他只提供一个slf4j api(就是slf4j-api.jar包),这个包只有日志的接口,并没有实现,所以要使用得给它提供一个实现了些接口的日志包,比如:log4j,common logging,jdk log等,但是这些日志实现又不能通过接口直接调用,实现上他们根本就和slf4j-api不一致,因此slf4j又增加了一层来转换各日志实现包的使用,当然slf4j-simple除外。其结构如下:
slf4j-api(接口层)
|
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
|
各日志实现包
下面这个图更能说明其原理:
[img]http://www.slf4j.org/images/bindings.png[/img]
在这里还需要注意的是,连接层的jar包和实现的jar的版本要一致。
slf4j-simple最简单:
package Slf4jTest;
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-1.5.6.jar和slf4j-simple-1.0.jar两个包即可。