apache common logging和log4j区别

本文介绍了Apachecommonlogging作为一种日志框架接口的作用及其如何与log4j具体实现相结合来简化日志记录的过程。通过使用commonlogging,可以在不影响源代码的前提下轻松更换底层日志实现。
Apache common logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现
log4j是具体的日志实现,真正负责"写"日志的这个功能


common logging本身不是log,你可以把它看做是一个日志的接口
而log4j就是日志的实现


使用common logging方式实现日志,主要的原因在于可以忽略底层的日志实现,或者说为以后的日志实现库的更换提供透明界面
你可以考虑下,假设从log4j更换为logback,势必要重写所有原本使用log4j的源代码,而使用common logging的情况下,只需要更换jar包,而不需要对源代码做任何改动。


做日志的时候一般是两者一起用,commons-logging工作原理做接口,log4j做实现,应用起来比单独的使用log4j要简单


commons-logging工作原理:
1. 首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类
2. 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类
3. 查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类
4. 使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)
5. 使用commons-logging自己提供的一个简单的日志实现类SimpleLog
(以上顺序不保证完全准确,请参考官方文档)
commons-logging总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类. 
2025-11-30 05:48:34,248 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:260) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:136) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1138) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1063) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1055) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:664) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:258) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:304) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:621) at org.apache.logging.log4j.core@8.10.4/org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:285) at org.elasticsearch.server@8.10.4/org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:250) at org.elasticsearch.server@8.10.4/org.elasticsearch.common.
最新发布
11-30
log4j2:org.apache.logging.log4j.LogManager.getLogger(clazz) 会报这个错误:2025-07-10T01:57:26.560589600Z C1X31501/2025-07-10/FASTTEST_C1X31501 ERROR Loggers cannot be configured without a name 2025-07-10T01:57:26.563581300Z C1X31501/2025-07-10/FASTTEST_C1X31501 ERROR Could not create plugin of type class org.apache.logging.log4j.core.config.LoggerConfig for element Logger org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element Logger are invalid: field 'loggerName' has invalid value 'null' at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:208) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:123) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1206) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1125) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1117) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:715) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:271) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:324) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:677) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:766) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:788) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:301) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:160) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:48) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:139) at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:557) at jp.co.sr.common.LogManagerFactory.getLog(LogManagerFactory.java:26) at jp.co.sr.common.LogManager.<init>(LogManager.java:54) at jp.co.sr.bat.cmn.base.BaseBatchController.executeBatch(BaseBatchController.java:133) at A00FastTest.main(A00FastTest.java:37) 2025-07-10T01:57:26.564578800Z C1X31501/2025-07-10/FASTTEST_C1X31501 ERROR Null object returned for Logger in Loggers.
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值