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

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

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的架包的话,日志能正常打印,打印效果如下:

165339_AaQc_2245029.png

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

165520_Tevz_2245029.png

简单而言,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,其他的开源日志未涉及。菜鸟的见解,大牛勿喷。



转载于:https://my.oschina.net/u/2245029/blog/507761

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值