最近因为项目原因,认真学习了一下 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 这样的属性,使其生效就完美了。然而,并没有。 

转载于:https://www.cnblogs.com/keepthinking/p/5003314.html

log4j, common-logging, slf4j 关系相关推荐

  1. log4j与commons-logging slf4j的关系

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

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

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

  3. common.logging和log4j比较

    apache common logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现 log4j是具体的日 ...

  4. 使用idea解决包依赖冲突的问题SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory

    今天启动项目的时候出现jar包依赖冲突的问题,spring-boot项目默认使用logback日志库,然而又引入了log4j2导致出现下面的错误 SLF4J: Class path contains ...

  5. 【C#】【Log】Common.Logging.MultipleLogger及ETWLoggerd研究

    common.logging是基于java语言的一个日志门面框架,是Apache基金会下的commons项目下的一个子项目,让你的日志脱离具体的实现. Commong.Logging是.NET下的日志 ...

  6. C# 日志管理框架:Common.Logging和log4net

    01 - DLL引用 ‍common logging是一个通用日志接口框架,log4net是一个强大的具体实现框架. common logging可以把输出连接到其他非log类上, 如EntLib的日 ...

  7. log4j WARN 和 SLF4J WARN 解决办法

    Log4j 是什么 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog ...

  8. Metrics, tracing 和 logging 的关系

    译者注 Peter Bourgon原作: Metrics, tracing, and logging 译者:吴晟 原作发表时间: 2017年2月21日 这是在OpenTracing和分布式追踪领域内广 ...

  9. Bailian4109 公共朋友-Common Friends【关系】

    4109:公共朋友-Common Friends 总时间限制: 1000ms 内存限制: 65536kB 描述 小明和小红去参加party.会场中总共有n个人,这些人中有的是朋友关系,有的则相互不认识 ...

最新文章

  1. 如何通过RFID开发来迎接第四次工业革命(转)
  2. 贝叶斯优化python包_贝叶斯全局优化(LightGBM调参)
  3. java上转型对象特点_Java 浅析三大特性之一继承
  4. excel切片器显示错误_Office 2016中报表用户的新Excel切片器功能
  5. chrome 您即将提交的信息不安全_各地市场监督管理局发布食品安全抽检信息 通报不合格样品批次...
  6. beetle.express一通讯案例测试结果
  7. 四级信息安全工程师基础知识
  8. AI助力教学升级,掌门优课智能互动双师课程获用户认可
  9. PS 拖入图片保持原大小
  10. 美团实习生C++后台
  11. linux 下perl离线包下载
  12. P8195 [传智杯 #4 决赛] 小智的疑惑 —KMP
  13. 微信大数据解析不一样的人生,你被戳中了吗……
  14. 使用Microsoft.Office.Interop.Excel批量编辑Excel文件
  15. Docker Jenkins测试邮箱通知报错:553 Mail from must equal authorized user
  16. 神经结构搜索资料NAS
  17. 【微信小程序】自定义加载动画3
  18. 黑暗背景(所有暗主题cobalt,dracula...)Rstudio查看对象窗口viewer没有滚动条,白亮背景就有(所有白主题chrome,cloud)。R版本[64-bit] R-3.6.0
  19. 【BI学习作业18-评分卡模型】
  20. 计算机excel函数基础知识,《计算机基础知识复习资料》Excel函数详解.doc

热门文章

  1. python 六边形架构_通过纯css3代码实现六边形边框
  2. 4.3.7 ARP协议
  3. 3.5.3 CSMA协议
  4. mysql不停止重启服务器_不停止MySQL服务增加从库的两种方式
  5. 场效应管的判别、检测及使用时的注意事项!
  6. 网络爬虫 --DOM处理XML
  7. 从源码分析DEARGUI之add_input_text
  8. tomcat上传war包失败
  9. leetcode day4
  10. Google的Java开发规范