引用:https://blog.csdn.net/PanPa_WoNiu/article/details/81179644
目录
一、概述
slf4j(全称是Simple Loging Facade For Java)是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就好像我们经常使用的JDBC一样,只是一种规则而已。因此单独的slf4j是不能工作的,它必须搭配其他具体的日志实现方案,比如commons-logging、logback、 apache的org.apache.log4j.Logger,jdk自带的java.util.logging.Logger等等。
其中对于jar包:
slf4j-log4j12-x.x.x.jar是使用org.apache.log4j.Logger提供的驱动
slf4j-jdk14-x.x.x.jar是使用java.util.logging提供的驱动
slf4j-simple-x.x.x.jar直接绑定System.err
slf4j-jcl-x.x.x.jar是使用commons-logging提供的驱动
logback-classic-x.x.x.jar是使用logback提供的驱动
二、slf4j优势
1.与客户端很好的解耦
比如:我们发现了一位大牛开发了一个非常好而且又刚好能够满足自己需求的类库,类库里使用了apache的org.apache.log4j.Logger,然而你自己的程序在开发的时候使用的是jdk自带的java.util.logging.Logger,那么现在忧伤的问题来了:如果你想要使用,你是不是需要同时支持log4j和jdk两种日志系统?这样的话,你就需要添加两个实现同样功能的jar包并且维护两套日志配置,你是不是需要耗费更多的精力来进行维护?此时宝宝心里苦,宝宝不说。比如这位大牛开发的就是quartz,如果不使用slf4j的情况下使用quartz就是需要你本地系统维护它的日志配置,你还得维护自己原来的日志配置,这这怎么维护啊。所以还是使用上slf4j吧,这样你还是只使用本地原来的日志配置就能维护quartz了。
2.节省内存
log4j这些传统的日志系统里面并没有占位符的概念,当我们需要打印信息的时候,我们是这样使用:
package com.hafiz.zhang;
import org.apache.log4j.Logger;
public class TestLog4j {
private static final Logger LOGGER = Logger.getLogger(TestLog4j.class);
public static void main(String[] args) {
String message = "服务器出错啦.";
LOGGER.info("Error message is : " + message);
}
}
查看源码,我们发现了log4j的info函数有两种方式可供选择:
1 public void info(Object me