org.apache.log4j与org.apache.commons.logging这两个包有什么区别
2016-09-27 11:02
597 查看
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总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类.
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总是能找到一个日志实现类,并且尽可能找到一个"最合适"的日志实现类.
相关文章推荐
- org.apache.log4j与org.apache.commons.logging这两个包有什么区别
- Apache通用日志工具commons-logging和Log4j使用
- log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
- spring 错误 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
- java.lang.NoClassDefFoundError: org.apache.commons.logging.LogFactory.class
- Tomcat启动警告:log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
- Apache通用日志工具commons-logging和Log4j使用总结
- commons-logging和apache-log4j的结合使用
- java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
- Caused by: java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory
- org.apache.commons.logging 介绍
- org.apache.commons.logging.LogConfigurationException: The LogFactory attribute maven.log must be set
- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory spring启动时
- Apache通用日志工具commons-logging和Log4j使用总结
- struts2错误 : java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
- org.apache.commons.logging.LogFactory等问题
- org.apache.commons.logging的用法(上)
- Apache通用日志工具commons-logging和Log4j使用总结
- Apache Commons Logging日志与Log4j