1、以前进行日志操做通常都是在一个类中加入以下代码:
java
import org.apache.log4j.Logger; //引入的是log4j的包 private static final Logger LOG = Logger.getLogger(Test.class);
2、后来看见别人的代码是这样写的:sql
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; //引入的是commons-logging的包 private static Log logger = LogFactory.getLog(AccountAction.class);
3、后来想起使用log4j要把mybatis的sql语句输出还须要添加slf4j-api-x.x.x.jar和slf4j-log4j12-x.x.x.jar两个包。看到这么多日志,乱七八糟的,因此就度娘了一下,稍微的了解了下这些日志之间的关系。这里顺便给出我的较为肤浅的总结,看官有更好的理解能够留言,你们一块儿学习进步。
apache
1)commons-logging和slf4j-apiapi
这两个日志包,都是提供出一个标准接口。相似于JDBC同样,给出一个接口,具体怎么实现大家本身去玩。不一样点在于commons-logging本身有一个简单的实现。因此,在(二)的代码中,若是引入了commons-logging没有引入log4j的架包的话,日志能正常打印,打印效果以下:mybatis
若是加入log4j的架包的话(须要配置log4j.properties或者log4j.xml),日志效果以下:学习
简单而言,commons-logging会先去查找commons-logging.properties配置文件,查找指定的实现日志,若是没有,默认去查找log4j(毕竟都是自家作的东西嘛),若是没有指定,也没有找到log4j的架包实现,那么,commons-logging就本身上,结果就是图片一中的效果。而slf4j就没有默认实现。spa
二、slf4j-api和slf4j-log4j12日志
slf4j-api和commons-logging的接口确定存在不一致的地方。有的日志实现可能没有遵守slf4j-api的接口来,因此,中间转换一层。因此slf4j-log4j12就是一个相似于一个转换器的味道。这里转换以后使用的是log4j。固然还有其余的,好比sli4j-slf4j-logback。code
4、总结xml
1)本身的项目使用建议引入commons-logging和log4j两个架包,而后使用(二)中的代码;
2)有的项目使用的多是slf4j,好比mybatis,若是还要继续使用log4j就须要在引入slf4j-log4j12;
3)即便用log4j两个组合:【commons-logging+log4j】和【slf4j+slf4j-log4j12+log4j】;
本文只针对log4j,其余的开源日志未涉及。菜鸟的看法,大牛勿喷。