最近因为项目原因,认真学习了一下 log4j 相关内容,主要是从网上找资料,以及追踪原代码。
 
关于如何使用,网上有很多资料,这里不做具体介绍。下面介绍一下这些工具的关系。
 
log4j 是最强大和流行的日志工具,同时又有很多其他的日志工具,比如 logback(据说比log4j 更优秀,由同一班人马打造), java.util.logging.Logger 等。为了统一各种各样的日志工具,common-logging 出现了,下面是它所有的源代码文件:
结构明了:
1、Log 定义了统一的抽象接口
2、impl 中封装了已有的多种日志工具,比如 Log4JLogger 是对 log4j 的封装,Jdk14Logger 是对 java.util.logging.Logger 的封装, AvalonLogger/LogKietLogger 是另外日志工具的封装。最后 SimpleLog 是 common-logging 自己实现的 Logger,功能简单,是其他工具不能使用时的最终方案。
3、LogFactory 是对外的接口,使用方式为:LogFactory.getLog(Test.class)。默认实现为图中的 LogFactoryImpl。
 
slf4j 与上面的 common-logging 功能和定位相似,由一个基础的包 slf4j-api 定义了统一的日志接口 Logger,工厂接口 LoggerFactory。包 slf4j-log4j12 是 slf4j 对 log4j(1.2版本?) 的封装,其中 Log4jLoggerAdapter 包装了 org.apacha.log4j.Logger,继承于org.slf4j.Logger,Log4jLoggerFactory 是相应的工厂方法。这里两个 jar 包需要一起使用。
 
我们的项目里,是一种更加纠结的情况,三者都存在,具体是 slf4j 实现了 common-logging 的两个接口,即下图中 SLF4JLog 实现了 org.apache.commons.logging.Log,工厂方法 SLF4jLogFactory 继承了 org.apache.commons.logging.LogFactory。
个人觉得这样过于复杂,没有必要,不知道能够移除对 slf4j 的依赖。
 
关于 log4j,默认的配置文件是 log4j.properties(或者 log4j.xml,但我不太喜欢用)。引用的一些 jar 包常常已经包含了该文件(差评),有可能覆盖我们自己的配置文件,需要手工移除。当然也可以使用系统变量 log4j.configuration 指定配置文件地址,而不是使用默认文件地址。
 
commons-logging 有个默认的配置文件commons-logging.properties,该文件可有可无,这是其方便之处。其中可以设置变量 priority,解决了多个配置文件的选择问题。我觉得,如果可以在 commons-logging.properties 里面也设置 log4j.configuration 这样的属性,使其生效就完美了。然而,并没有。 
 

log4j, common-logging, slf4j 关系的更多相关文章

  1. log4j与commons-logging slf4j的关系

    1. slf4j     他只提供一个核心slf4j api(就是slf4j-api.jar包),这个包只有日志的接口并没有实现     所以如果要使用就得再给它提供一个实现了些接口的日志包,     ...

  2. Slf4j与log4j及log4j2的关系及使用方法

    Slf4j与log4j及log4j2的关系及使用方法 slf4j slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独 ...

  3. SLF4J和Logback和Log4j和Logging的区别与联系

    本文转载自:一个著名的日志系统是怎么设计出来的?(作者:刘欣) 前言 Java帝国在诞生之初就提供了集合.线程.IO.网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略 ...

  4. Common.Logging源码解析一

    Common.Logging是Apache下的一个开源日志接口组件,主要用于切换不同的日志库,因为当前流行的日志库有很多向log4j.log4net(log4j的.net版本)等等,所以为了能灵活的切 ...

  5. Common.Logging log4net Common.Logging.Log4Net 配置

    1.log4net 单独配置 log4net支持多种格式的日志输出,我这里只配置输出到本地的txt文件这种格式. <log4net> <root> <appender-r ...

  6. 使用Common.Logging+log4net规范日志管理

    Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog ...

  7. 使用Common.Logging与log4net的组件版本兼容问题

    引用:  http://www.cnblogs.com/shijun/p/3713830.html 近期使用了Common.Logging的ILog接口做日志接口,同时利用其log4net适配器与lo ...

  8. Common.Logging源码解析二

    Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...

  9. 日常报错记录2: MyBatis:DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.------------ Cause: java.lang.NoSuchMethodException: com.offcn.dao.ShopDao.<init>()

     直接上干货:  报错归纳1: DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4 ...

  10. 使用Common.Logging+log4net规范日志管理【转载】

    使用Common.Logging+log4net规范日志管理   Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大 ...

随机推荐

  1. 有未经处理的异常: 0xC00000FD: Stack overflow

    将“项目属性.链接器.系统.堆栈保留大小”设大一点比如16000000 这是我在网上找到的答案,很好的解决了我的问题,忘了是哪位大神了,总之,向大神致敬

  2. Update(Stage4):Spark Streaming原理_运行过程_高级特性

    Spark Streaming 导读 介绍 入门 原理 操作 Table of Contents 1. Spark Streaming 介绍 2. Spark Streaming 入门 2. 原理 3 ...

  3. 中国5G,如何避免重复投资?

    前不久,工信部正式向中国移动.中国联通.中国电信发放5G商用牌照,此举意味着中国提前启动5G商用计划,随之而来的,将会是运营商.设备商大规模的投资.相关数据机构预测,三大运营商2019年预计会投入30 ...

  4. 「JSOI2011」任务调度

    「JSOI2011」任务调度 传送门 一开始还在想写平衡树,看到 \(\text{TRANS}\) 操作后就晓得要用可并堆了. 这题好像就是个可并堆的板子题??? ADD 直接往对应的对里面加元素 D ...

  5. Lucene的初步了解和学习

    Lucene的学习一,什么是全文检索 1.数据的分类 1.结构化数据 格式固定,长度固定,数据类型固定. 例如:数据库中的数据: 2.非结构化数据 word文档,pdf文档,邮件,html,txt 格 ...

  6. WKWebView单个界面添加请求头

    https://www.jianshu.com/p/14b9ea4bf1d4 https://github.com/Yeatse/NSURLProtocol-WebKitSupport/blob/ma ...

  7. 使用KVC键值编码

    掌握KVC从不使用setter.getter.点语法开始. ----- 前言 对象的内部状态是由属性进行封装的.访问对象属性的方式平时在开发过程中用得最多的是getter方法和点语法.键值编程KVC也 ...

  8. 将UIImage转换成圆形图片image

    建议写成UIImage分类,如下: .h //变成圆形图片 - (UIImage *)circleImage; .m //变成圆形图片 - (UIImage *)circleImage { // NO ...

  9. 电影推荐算法---HHR计划

    1,先看FM部分. 2,看看冷启动. 0,热门召回源. 1,男女召回源,年龄召回源,职业召回源,score最高. 2,男女年龄职业相互组合: 3,存入redis.天级别更新. 3,召回+排序先搞懂. ...

  10. linux用户权限、系统信息相关命令(待学)

    用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01.用户和权限的基本概念 1.1 基本概念 用户 是Linux系统工作中重要的一环, 用 ...