Java日志系统相关内容_Slf4j和Commons-logging

项目中使用了httpclient,httpclient的日志使用的是commons-logging的日志系统,但是项目本身使用的slf4j+logback;

导致httpclient的日志信息无法输出到logback配置的日志文件中;

之前只了解slf4j是门面,有很多的具体实现;不知道commons-logging的结构;再次读了下slf4j和commons-logging的官网,明确两者的异同点;以及如何桥接


一:SLF4J

这是一个门面,应用中需要有具体的实现;每一个具体的日志实现需要各自的配置文件,具体的要参考具体实现的doc



二:commons-logging

1:我的理解也是一个门面;应用中直接使用commons-logging的Log接口,并由commons-logging在运行时决定使用哪种日志架构;
2:commons-logging中默认都支持Log4j,因此只要同时加载commons-logging包和log4j包,可以不用配置即可用在应用中使用commons-logging的接口方法。 
当然,标准的应用的是需要的配置,如果你log4j则这个配置是可选的。
下面说明如何通过配置文件来组合commons-logging和log4j。 配置文件内容很简单,就指定一个日志实现类即可;
下面是个示例文件: commons-logging.properties 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
 在使用Log4j作为日志工具的时候,commons-logging.properties的配置可以不要 
3:如何决定使用哪一种日志架构,流程如下: 
(1) 首先,寻找org.apache.commons.logging.LogFactory 属性配置
(2) 否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory 文件,若找到则装载里面的配置,使用里面的配置。 
(3) 否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。 
(4) 否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

三:桥接

1:如果应用中使用的是slf4j,但是某些组件使用的是其他的日志架构,比如 log4j, Java Commons-logging或者java.util.logging APIs;
slf4j提供了几种桥接方式,组件的代码中使用其他日志系统最终会使用slf4j的日志实现;

2:有的组件必须强制使用jcl,但是代码中使用了slf4j。需要将所有使用slf4j的日志转换为jcl的实现;
     参考http://www.slf4j.org/legacy.html中slf4j-jcl.jar的介绍

四:slf4j和commons-logging的异同点在哪里?各自有什么优势?


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值