码迷,mamicode.com
首页 > 编程语言 > 详细

Java日志commons-logging log4j slf4j之间的关系

时间:2015-09-17 19:58:47      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

一、之前进行日志操作一般都是在一个类中加入如下代码:

import org.apache.log4j.Logger;
//引入的是log4j的包
private static final Logger LOG = Logger.getLogger(Test.class);

二、后来看见别人的代码是这样写的:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//引入的是commons-logging的包
private static Log logger = LogFactory.getLog(AccountAction.class);

三、后来想起使用log4j要把mybatis的sql语句输出还需要添加slf4j-api-x.x.x.jar和slf4j-log4j12-x.x.x.jar两个包。看到这么多日志,乱七八糟的,所以就度娘了一下,稍微的了解了下这些日志之间的关系。这里顺便给出个人较为肤浅的总结,看官有更好的理解可以留言,大家一起学习进步。

1)commons-logging和slf4j-api

这两个日志包,都是提供出一个标准接口。类似于JDBC一样,给出一个接口,具体怎么实现你们自己去玩。不同点在于commons-logging自己有一个简单的实现。所以,在(二)的代码中,如果引入了commons-logging没有引入log4j的架包的话,日志能正常打印,打印效果如下:

技术分享

如果加入log4j的架包的话(需要配置log4j.properties或者log4j.xml),日志效果如下:

技术分享

简单而言,commons-logging会先去查找commons-logging.properties配置文件,查找指定的实现日志,如果没有,默认去查找log4j(毕竟都是自家做的东西嘛),如果没有指定,也没有找到log4j的架包实现,那么,commons-logging就自己上,结果就是图片一中的效果。而slf4j就没有默认实现。

2、slf4j-api和slf4j-log4j12

slf4j-api和commons-logging的接口肯定存在不一致的地方。有的日志实现可能没有遵照slf4j-api的接口来,所以,中间转换一层。所以slf4j-log4j12就是一个类似于一个转换器的味道。这里转换之后使用的是log4j。当然还有其他的,比如sli4j-slf4j-logback。

四、总结

1)自己的项目使用建议引入commons-logging和log4j两个架包,然后使用(二)中的代码;

2)有的项目使用的可能是slf4j,比如mybatis,如果还要继续使用log4j就需要在引入slf4j-log4j12;

3)即使用log4j两个组合:【commons-logging+log4j】和【slf4j+slf4j-log4j12+log4j】;

本文只针对log4j,其他的开源日志未涉及。菜鸟的见解,大牛勿喷。



Java日志commons-logging log4j slf4j之间的关系

标签:

原文地址:http://my.oschina.net/u/2245029/blog/507761

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!