commons-logging 和 log4j 之间的关系

几种志框架:Log4j Log4j2 SLF4J logback和Apache Commons Logging的比较 作为Java开发人员,对于日志记录框架一定非常熟悉。而且几乎在所有应用里面,一定会用到各种各样的日志框架用来记录程序的运行信息。而对于一个成熟的Java应用,这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在应用的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通常很多企业会通过收集日志信息来对系统的运行状态进行实时监控预警。 总体概览 目前的日志框架有JDK自带的logging,log4j1、log4j2、logback ,这些框架都自己定制了日志 API ,并且有相应的实 阅读详情

转自: http://zachary-guo.iteye.com/blog/361177


       我们在做项目时,日志的记录是必不可少的一项任务,而我们通常是使用 apache 的 log4j 日志管理工具。然而,在项目中,我们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不可以,这两者之间到底是怎么的一种关系呢? 

        作为记录日志的工具,它至少应该包含如下几个组成部分(组件): 
        1. Logger 
             记录器组件负责产生日志,并能够对日志信息进行分类筛选,控制什么样的日志应该被输出,什么样的日志应该被忽略。它还有一个重要的属性 - 日志级别。不管何种日志记录工具,大概包含了如下几种日志级别:DEBUG, INFO, WARN, ERROR 和 FATAL。 
        2. Level 
            日志级别组件。 
        3. Appender 
            日志记录工具基本上通过 Appender 组件来输出到目的地的,一个 Appender 实例就表示了一个输出的目的地。 
       4. Layout 
            Layout 组件负责格式化输出的日志信息,一个 Appender 只能有一个 Layout。
 

        我们再来看看 log4j.jar,打开 jar 包,我们可以看到 Logger.class(Logger),Level.class(Level), FileAppender.class(Appender), HTMLLayout.class(Layout)。其它的我们先忽略不看,这几个字节码文件正好是记录日志必不可少的几个组件。 

        接下来看看 commons-logging 中的 org.apache.commons.logging.Log.java 源码: 

Java代码  收藏代码
  1. package org.apache.commons.logging;  
  2. public interface Log {  
  3.     public boolean isDebugEnabled();  
  4.     public boolean isErrorEnabled();  
  5.     public boolean isFatalEnabled();  
  6.     public boolean isInfoEnabled();  
  7.     public boolean isTraceEnabled();  
  8.     public boolean isWarnEnabled();  
  9.     public void trace(Object message);  
  10.     public void trace(Object message, Throwable t);  
  11.     public void debug(Object message);  
  12.     public void debug(Object message, Throwable t);  
  13.     public void info(Object message);  
  14.     public void info(Object message, Throwable t);  
  15.     public void warn(Object message);  
  16.     public void warn(Object message, Throwable t);  
  17.     public void error(Object message);  
  18.     public void error(Object message, Throwable t);  
  19.     public void fatal(Object message);  
  20.     public void fatal(Object message, Throwable t);  
  21. }  


        很显然,只要实现了 Log 接口,它就是一个名副其实的 Logger 组件,也验证了 Logger 组件具有日志级别的属性。继续看 commons-logging org.apache.commons.logging.impl 包下的几个类的源码片段: 
Java代码  收藏代码
  1. package org.apache.commons.logging.impl;  
  2.   
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.log4j.Logger;  
  5. import org.apache.log4j.Priority;  
  6. import org.apache.log4j.Level;  
  7. import ......  
  8.   
  9. public class Log4JLogger implements Log, Serializable {  
  10.     // 对 org.apache.commons.logging.Log 的实现  
  11.     ......  
  12. }  
  13.   
  14. ------------------------------------------------------------------  
  15.   
  16. package org.apache.commons.logging.impl;  
  17.   
  18. import org.apache.commons.logging.Log;  
  19. import java.io.Serializable;  
  20. import java.util.logging.Level;  
  21. import java.util.logging.Logger;  
  22.   
  23. public class Jdk14Logger implements Log, Serializable {  
  24.      // 对 org.apache.commons.logging.Log 的实现  
  25.     ......  
  26. }  


        好了,分析到这里,我们应该知道,真正的记录日志的工具是 log4j 和 sun 公司提供的日志工具。而 commons-logging 把这两个(实际上,在 org.apache.commons.logging.impl 包下,commons-logging 仅仅为我们封装了 log4j 和 sun logger)记录日志的工具重新封装了一遍(Log4JLogger.java 和 Jdk14Logger.java),可以认为 org.apache.commons.logging.Log 是个傀儡,它只是提供了对外的统一接口。因此我们只要能拿到 org.apache.commons.logging.Log,而不用关注到底使用的是 log4j 还是 sun logger。正如我们经常在项目中这样写: 
Java代码  收藏代码
  1. // Run 是我们自己写的类,LogFactory 是一个专为提供 Log 的工厂(abstract class)  
  2. private static final Log logger = LogFactory.getLog(Run.class);  


        既然如此,我们向构建路径加了 commons-logging.jar 和 log4j.jar 两个 jar 包,那我们的应用程序到底使用的 log4j 还是 sun logger 呢?我们能不能认为由于加了 log4j.jar 包,就认为系统使用的就是 log4j 呢?事实上当然不是这样的,那我还认为我正在使用 jdk 而认为系统使用的是 sun logger 呢。使用 Spring 的朋友可以在 web.xml 中看到如下 listener 片段: 
Xml代码  收藏代码
  1. <listener>  
  2.     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  3. </listener>  


        这是由 Spring 为我们提供的实现了标准的 servlet api 中的 javax.servlet.ServletContextListener 接口,用于在 web 容器启动时做一些初始化操作。我们逐层进入 Spring 的源码,可以看到如下代码: 
Java代码  收藏代码
  1. Log4jConfigurer.initLogging(location, refreshInterval);  


        终于找到了 org.springframework.util.Log4jConfigurer,这正是 log4j 提供给我们的初始化日志的类。至此,我们终于明白了我们系统的的确确使用的是 log4j 的日志工具。 

        可是问题又来了,org.apache.commons.logging.Log 和 org.apache.log4j.Logger 这两个类,通过包名我们可以发现它们都是 apache 的项目,既然如下,为何要动如此大的动作搞两个东西(指的是 commons-logging 和 log4j)出来呢?事实上,在 sun 开发 logger 前,apache 项目已经开发了功能强大的 log4j 日志工具,并向 sun 推荐将其纳入到 jdk 的一部分,可是 sun 拒绝了 apache 的提议,sun 后来自己开发了一套记录日志的工具。可是现在的开源项目都使用的是 log4j,log4j 已经成了事实上的标准,但由于又有一部分开发者在使用 sun logger,因此 apache 才推出 commons-logging,使得我们不必关注我们正在使用何种日志工具。

commons-logging和Log4j的关系 NULL 博文链接:https://icourses.iteye.com/blog/1839984 立即下载

相关推荐

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4940

转commons-logging与log4j关系

 我们在做项目时,日志的记录是必不可少的一项任务,而我们通常是使用 apache 的 log4j 日志管理工具。然而,在项目中,我们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不可以,这两者之间到底是怎么的...

lumingming1987的博客 294

VM与欧姆龙PLC通讯设置:Fins TCP/UDP协议实战避坑指南

本文详细解析了VM视觉平台与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战配置与避坑要点。文章对比了Fins TCP与Fins UDP的差异,推荐在多数工业控制场景下优先选用Fins TCP以保证可靠性,并深入讲解了网络设置、寄存器地址映射、轮询优化等核心配置步骤。同时,针对常见的多次触发拍照、数据解析错误等问题提供了具体的解决方案和调试技巧,旨在帮助工程师快速建立稳定高效的通讯连接。

e4f5g6h7的博客 594

Log4j和commons-logging的关系

文章参考 http://zy19982004.iteye.com/blog/1867448       1、commons-logging是一个简单的适配器,为各种各样的日志实现提供了统一的接口。 2、当变化日志实现时,application不需要做任何改变。 3、commons-logging也提供了简单的日志实现,但不推荐使用。   Commons-logging能帮我们做什么

黄彪博客 485

无人机精准降落辅助系统核心技术解析

接近地面时(<10米)切换至基于图像的视觉伺服(IBVS),依据图像特征点偏移(如靶标图案、LED标记)微调姿态,消除位置累积误差。通过SRUKF(平方根无迹卡尔曼滤波) 算法融合三类数据,输出6自由度位姿估计(精度达厘米级),抑制单一传感器噪声。权值根据信噪比动态调整。模型预测控制(MPC):针对斜坡降落,构建包含平台倾角、风扰的动力学方程,滚动求解最优油门序列。动态照明适配:针对夜间或低光照场景,系统向降落平台发送亮度调节指令,如增强红外信标强度或调整可见光LED阵列,确保特征识别鲁棒性。

YUNZHUO666的博客 1695

Dify插件实战:实时渲染AI生成的HTML/SVG/Canvas代码

在现代Web开发与AI应用集成中,前端渲染技术是实现动态内容展示的核心。其原理在于浏览器引擎解析HTML、CSS、JavaScript等代码,并将其转换为可视化的用户界面。这项技术的价值在于极大提升了开发效率与用户体验,允许开发者快速构建和迭代交互式应用。在AI应用开发领域,尤其是大语言模型(LLM)集成场景,如何将模型生成的**结构化代码**(如描述UI的HTML或数据图表的SVG)实时转化为可视化组件,成为一个关键需求。这直接关系到**Dify**等低代码AI平台能否提供流畅的、所见即所得的交互体验。本

weixin_42545664的博客 498

apache commons Logging与Log4j结合的使用

apache commons Logging 是一种JCL ,java commons Logging. 它的宗旨在于取消各种日志框架实现之间的差异,以统一的一致地接口API来操作日志。从而实现高度的日志系统抽象,你无需从新编码就可以切换不同的日志框架实现。所以所commons Loging屏蔽了具体日志实现了之间的差异。(思路上类似于JDBC的抽象)。我们只需要面对Commons Loggin

小小懒羊羊 1647

手把手教你学simulink(43.2)--光伏发电场景示例:基于Simulink开发一个光伏发电系统仿真模型:采用神经网络控制策略进行优化

需求分析光伏发电系统(Photovoltaic System, PV)是将太阳能转换为电能的重要手段,广泛应用于分布式发电、并网发电和离网供电等领域。随着光伏技术的发展,如何提高光伏发电系统的效率和稳定性成为研究的重点。传统的控制策略(如PID控制器)虽然简单易实现,但在复杂工况下(如光照强度变化、温度波动等)难以达到最优性能。因此,引入先进的控制策略,如神经网络控制(Neural Network Control, NNC),可以显著提升系统的响应速度和鲁棒性。

MHD0815的博客 437

apache commons-logging和log4j

org.apache.commons.logging.LogFactory内部装载日志系统的顺序: 在它的getFactory()函数中: 1.首先检查系统属性org.apache.commons.logging.LogFactory是否定义,如果定义了,使用这里定义的值 2.如果没有定义,使用JDK1.3之后的发现系统,在META-INF/services目录下找这个service: ME

kittaaron的专栏 1128

Pulseaudio之同步/异步(十一)

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。 PulseAudio的主要特点包括: 可对每一个应用程序进行音量控制Per-application volume controls 可扩展的插件与支持可装载模块架构 兼容性许多流行的音频应用程序 支持多重音源和多重输出 低延时操作和支持延迟测量 一个对处理器资源效率零拷贝内存架构 能够发现本地网络上使用PulseAu

Android系统攻城狮 994

史上最全!研究生科研必备科研工具(含AI科研工具),附使用说明和示例

这些工具在科研中的应用非常广泛,可以帮助研究生更高效地完成研究任务。为了更好地利用这些工具,建议深入学习它们的官方文档和教程,或者参加相关的工作坊和培训。

智能AI让学术科研更容易 3941

Apache通用日志工具commons-logging和Log4j使用总结

Apache通用日志工具commons-logging和Log4j使用总结   前言   在程序开发中,有时候为了跟踪代码的运行情况,需要在程序代码中加入一些打印代码运行情况的日志代码,在早期的C语言中,一般都是用printf()函数来实现这些信息的输出,在Java语言中用System..out.println()来实现控制台信息输出。这种输出的信息功能非常有限,如果要输出到文件,就很麻烦...

weixin_34175509的博客 485

YOLOv8【第四章:注意力机制篇·第20节】一文讲透,注意力机制设计原则与选择指南 - 从原理到实践的系统化方法论!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO改进最全最新的专栏,质量分97分+,全网顶流),改进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结改进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读!

**My Coding Family** 895

(转)commons-logging 和 log4j 之间的关系

我们在做项目时,日志的记录是必不可少的一项任务,而我们通常是使用 apache 的 log4j 日志管理工具。然而,在项目中,我们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不可以,这两者之间到底...

wsfengye的博客 130

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

commons-logging,log4j,logback,slf4j之间的关系和SpringBoot默认的日志框架

1、commons-loggin,slf4j只是一种日志抽象门面,不是具体的日志框架。 2、log4j,logback是具体的日志框架。 3、一般首选使用slf4j+logback,或者slf4j+log4j,commons-logging+log4j。 SpringBoot 日志配置 默认采用LogBack作为日志输出! ...

weixin_39389888的博客 481

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

系统窗选购全攻略:从型材、玻璃、五金到安装的避坑指南

在建筑节能与家居舒适性领域,门窗系统作为建筑围护结构的关键组成部分,其性能直接影响建筑的能耗、隔音与安全。其核心原理在于通过型材断桥结构、中空玻璃与高性能密封系统,阻断热传导与空气渗透,从而实现保温隔热与降噪。从技术价值看,优质门窗系统能显著降低建筑能耗,提升居住品质与资产价值。在应用场景上,无论是应对严寒酷暑的气候挑战,还是解决临街噪音困扰,一套由型材、玻璃、五金、辅料及专业安装构成的系统解决方案都至关重要。本文以断桥铝系统窗为例,深入剖析其构成要素,如PA66 GF25隔热条、Low-E中空玻璃、品牌五

weixin_33910460的博客 464

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

commons-logging和log4j

在项目中,我们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。     为什么我们在使用 log4j 的同时还要引入 commons-logging.jar 呢,或者说不用 commons-logging.jar 可不可以,这两者之间到底是怎么的一种关系呢?     我们都知道,真正的记录日志的工具是 log4j 和 sun 公司提供的日志工

秀才的专栏 2615

log4j与commons-logging,slf4j的关系

今天看到一篇关于log4j和commons-logging,slf4j的关系的文章,该文中中提到的关于日志组合的框架的东西挺有用,故记录下来共以后使用 文章转自: http://blog.sina.com.cn/s/blog_9ed7f0d70101l6z1.html 注:为防止原文遗失,故运用复制粘贴大法将其转移至此。 前面有一篇日志中简单的介绍了 log4j,同时也介绍了它与c

duanmuxiao的专栏 390

理顺常用日志框架Commons-logging,slf4j,log4j,logback

Commons-loggin:是apache最早提供的日志的门面接口 SLF4j:是Simple Logging Facade for Java的简称,即java的简单日志门面。类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,他在编译时静态绑定真正的Log库 Log4j:通过使用Log4j,我们可以控制日志信息输送的目的地,是真正的实现日志输出的具体实现 logback:也是一种日志实现。Logback是由log4j创始人设计的又一个开源日记组件,LogBack被

三侠剑的博客 428

java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)

java日志,需要知道的几件事 如果对于commons-loging 、log4j 、slf4j 、LogBack 等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。 一、     概念 Commons-logging : apache最早提供的日志的门面接口。

kldequfeng的专栏 407
上一篇: 利用log4j显示hibernate打印sql中的参数
下一篇: 服务器运行的状态,修改Spring中的applicationContext.xml配置文件
java85140031
博客等级 码龄18年 34粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值