Apache Common-Logging是广泛使用的Java日志门面库。我以前一直都使用它和log4j编写日志。
Apache Common-Logging通过动态查找的机制,在程序运行时自动找出真正使用的日志库。
Apache Common-Logging一直都运作得很好。直到最近,我写OSGI插件时,它不能工作了。
原因是Apache Common-Logging使用了ClassLoader寻找和载入底层的日志库。而OSGI中,不同的插件使用自己的ClassLoader。
一个线程的ClassLoader在执行不同的插件时,其执行能力是不同的。
OSGI的这种机制保证了插件互相独立,然而确使Apache Common-Logging无法工作!
解决之道是使用新的日志门面库Slf4j。
Slf4j库类似于Apache Common-Logging。但是,他在编译时静态绑定真正的Log库。使用Slf4j时,如果你需要使用某一种日志实现,那么你必须选择正确的Slf4j的jar包的集合。
这确实麻烦了一点,但总算可以在OSGI中开发日志了。
其实,这一点点工作也不算麻烦。
使用CommonLog接口而实际由Slf4j和Log4j实现的过程:
1,项目中照常使用
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
编写日志。
2,仍然在src下使用log4j.properties文件进行配置。
3,使用的所有jar文件:
1)log4j-1.2.15.jar这是log4j的库。 Slf4j并不改变这个底层实现库。
2)slf4j-api-1.5.2.jar 这是Slf4j库。
3)slf4j-log4j12-1.5.2.jar这包含Log4j的适配器和静态绑定log4j底层实现。
4)jcl-over-slf4j-1.5.2.jar这提供了Commons-Logging接口,以及使用common-loggin的接口,底层还是由SLF4J来决定哪种实现机制 。
这里,我们需要使用Log4j的原生库,但是不需要Commons-Logging的原生库。
OK,把上面这4个jar包复制到lib下,导入项目中,就可以像以往一样继续使用Apache Common-Logging编写日志了。
如果你喜欢使用slf4j的门面类,或者非log4j的日志实现库。只需要像上面把需要的jar包扔进自己的项目即可!
[转自:http://blog.csdn.net/shendl]
分享到:
相关推荐
4. **Slf4j** - 日志门面,允许用户在运行时选择不同的日志实现,如Common-Logging或Log4j,提供了统一的API进行日志记录。 5. **MySQL** - 常用的关系型数据库管理系统,用于存储应用的数据。 在搭建项目时,首先...
今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...
`slf4j-jcl-1.7.7.zip`这个压缩包包含了SLF4J与Jakarta Commons Logging(JCL)的适配器,JCL是一个早期的日志抽象层,SLF4J通过这个适配器使得JCL的用户可以无缝切换到SLF4J,享受更好的日志管理。 **Jakson API**...
Commons Logging通过提供一个抽象层,允许开发者使用简单的API来记录日志,而具体的日志实现(如Log4j、Java Util Logging或SLF4J)可以根据项目需求或者环境配置进行选择和切换。 Commons Logging的核心概念包括...
SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中常见的日志处理框架,它们在软件开发中扮演着至关重要的角色。SLF4J提供了一个抽象层,允许开发者选择自己喜欢的日志框架,如Logback、Log4j等。而Log4j...
Apache Commons Logging 提供了一个接口,使得开发者可以方便地切换不同的日志实现,如 Log4j、Java Util Logging 或者 Simple Logging Facade for Java (SLF4J)。它的主要优点在于解耦了应用程序代码和实际日志实现...
`commons-logging`是一个轻量级的日志接口抽象层,它允许开发者使用不同的日志实现(如log4j、java.util.logging或JCL-over-SLF4J等)而无需修改代码。这提供了极大的灵活性,使得在不同的环境下可以方便地切换日志...
在配置文件中,可以通过`org.apache.commons.logging.Log`属性来指定使用的日志实现,例如设置为`org.apache.commons.logging.impl.Log4JLogger`将使用Log4j作为日志系统。 在实际应用中,我们常常遇到的一个问题是...
包含hadoop平台Java开发的所有所需jar包,例如activation-...slf4j-log4j12-1.7.25.jar snappy-java-1.0.5.jar stax-api-1.0-2.jar stax2-api-3.1.4.jar woodstox-core-5.0.3.jar xmlenc-0.52.jar zookeeper-3.4.9.jar
4. **SLF4J (Simple Logging Facade for Java)**: SLF4J提供了一个与JCL类似的接口,但其设计目标是成为日志接口的标准,鼓励使用绑定机制来选择具体的日志实现。JCL可以通过SLF4J桥接器与SLF4J一起使用,这样可以...
首先,我们来看"common-logging.jar",它是Apache Commons Logging的实现,提供了一个统一的日志接口,允许开发者选择不同的底层日志框架,如Log4j或java.util.logging。通过这个接口,开发者可以在不修改代码的情况...
7. **SLF4J (Simple Logging Facade for Java)**: SLF4J 提供一个抽象层,允许用户在部署时插入所需的日志框架。Maven使用SLF4J进行日志记录,方便开发者调试和监控构建过程。 8. **Wagon**: Wagon是Maven的运输...
- 例如,添加`<cxf:property key="org.apache.cxf.logging.FrontendLoggerClass" value="org.apache.cxf.common.logging.Slf4jLogger"/>`将CXF的日志输出切换到SLF4J。 4. **自定义日志拦截器**: - 如果需要更细...
SLF4J(Simple Logging Facade for Java)则是一个日志抽象层,允许开发者在不修改代码的情况下更换不同的日志实现。本主题将详细介绍如何利用Logback和SLF4J来将日志记录到Kafka队列中,以及支持日志解析和过滤等...
Commons-Logging是一个日志抽象层,它提供了一个统一的接口,允许开发者在不修改代码的情况下切换底层的日志实现,如Log4j、Java内置的日志系统或者SLF4J等。 Commons-Logging通过简单的API,使得开发者能够在代码...
3. **日志处理库** (slf4j-log4j12-1.7.7.jar, slf4j-api-1.7.7.jar, log4j-1.2.17.jar, commons-logging-1.1.3.jar): - **SLF4J (Simple Logging Facade for Java)** 是一个日志门面,允许开发者选择自己喜欢的...
jcl-over-slf4j-1.7.7.jar jedis-2.5.1.jar joda-time-2.6.jar jstl-1.2.jar jtds-1.3.1.jar jul-to-slf4j-1.7.7.jar junit-4.11.jar log4j-1.2.17.jar mail-1.4.7.jar metadata-extractor-2.6.2.jar mybatis-3.2.8....
Slf4j 类似于 Apache Common-Logging 和 Log4J,但 Slf4j 比它们都要优秀。 9. Google Collections Google Collections 库是由 Google 基于 Java5.0 Collections Framework 开发的一套新的 Java 集合框架,提供了...
5. **common-logging-1.1.jar**: Apache Commons Logging,这是一个轻量级的接口,允许开发者编写与具体日志实现无关的代码。它支持多种日志框架,包括Log4j和java.util.logging。 6. **spring 3.0的所有jar包**: ...
6. **slf4j-api-1.x.x.jar** 和 **slf4j-simple-1.x.x.jar**: Simple Logging Facade for Java (SLF4J) 是一个日志API,slf4j-api是接口,slf4j-simple是简单的实现,提供基础的日志记录功能。在使用JXLS时,这两个...