看现在有很多开源的软件,log记录都是用SLF4j,以前自己是用common-logging觉得十分方便,可以动态的切换实际的log系统,这样common-logging和SLF4J有什么区别。
网上找了一篇文档,觉得说明了一些问题:
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编写日志了。
分享到:
相关推荐
我用maven + spring mvc +JDBCTEMPLATE + 由Slf4j实现Common-Logging+Log4j的日志控制 (数据库用MySQL)简单编写的注册功能模块 附:项目搭建中的完整步骤和说明
NULL 博文链接:https://feiyan35488.iteye.com/blog/955366
NULL 博文链接:https://wwwzhouhui.iteye.com/blog/391950
java连接jdbc使用到的13个jar包:commons-logging-1.0.4,hadoop_fat,hadoop-common-2.0.0-cdh4.7.0,hive-...libfb303-0.9.0,libthrift-0.9.0-cdh4-1,log4j-1.2.16,slf4j-api-1.6.1,slf4j-api-1.6.4,slf4j-log4j12-1.6.1
包含了NLog4.4.12的源代码和NuGet包,slf4net0.1.32.1的NuGet包,common.logging3.4.1的Nuget包。
common-2.1.0.jar,hive-jdbc-0.13.1.jar,hive-service-1.1.0.jar,httpclient-4.5.3.jar,httpcore-4.4.6.jar,libthrift-0.9.2.jar,log4j-1.2.17.jar,slf4j-api-1.5.0.jar,slf4j-log4j12-1.5.0.jar等jar包
struts2-core-2.2.3.jar struts2-spring-plugin-2.2.3.jar xwork-core-2.2.3.jar commons-io-2.0.1.jar ...slf4j-nop-1.6.4.jar(这个jar包要去slf4j官网下载slf4j-1.6.4集成包) jdbc: ojdbc14.jar(oracle)
包含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
1.1.jar,junit-4.5.jar,mysql-connector-java-3.1.13-bin.jar,ognl-2.6.11.jar,slf4j-api-1.5.8.jar,slf4j-nop-1.5.8.jar,spring.jar,struts2-convention-plugin-2.1.6.jar,struts2-core-2.1.6.jar,struts2-spring-...
插件需要选择一个目录,该目录即不是hadoop的目录,也不是hadoop src目录,而是你...slf4j-log4j12-1.6.1.jar 所有这些文件均来自hadoop/share/hadoop目录。 指定了这个目录之后再新建MapReduce Project时就不会出错。
quartz1.8.6 slf4j-api slf4j-log4j12 log4j-18 common-logging-1.1.jar spring 3.0的所有jar包
commons-logging-1.1.3.jar commons-collections-3.1.jar hive-exec-0.13.1.jar hive-jdbc-0.13.1.jar hive-metastore-0.13.1.jar hive-service-0.13.1.jar ...slf4j-log4j12-1.7.5.jar hadoop-common-2.4.0.jar
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
slf4j-api-1.5.8.jar slf4j-nop-1.5.2.jar (二)、JPA: 位于 "\Hibernate\hibernate-entitymanager3.4.0.GA" 目录下的jar文件: hibernate-entitymanager.jar ejb3-persistence.jar hibernate-annotations.jar ...
slf4j-api-1.5.8.jar slf4j-nop-1.5.2.jar (二)、JPA: 位于 "\Hibernate\hibernate-entitymanager3.4.0.GA" 目录下的jar文件: hibernate-entitymanager.jar ejb3-persistence.jar hibernate-annotations.jar ...
slf4j-api-1.5.8.jar slf4j-nop-1.5.2.jar (二)、JPA: 位于 "\Hibernate\hibernate-entitymanager3.4.0.GA" 目录下的jar文件: hibernate-entitymanager.jar ejb3-persistence.jar hibernate-annotations.jar ...
slf4j-api-1.5.8.jar slf4j-nop-1.5.2.jar (二)、JPA: 位于 "\Hibernate\hibernate-entitymanager3.4.0.GA" 目录下的jar文件: hibernate-entitymanager.jar ejb3-persistence.jar hibernate-annotations.jar ...
51,slf4j-log4j12-1.6.4.jar 52,spring-aop-3.2.2.jar 53,spring-beans-3.2.2.jar 54,spring-context-3.2.2.jar 55,spring-context-support-3.2.2.jar 56,spring-core-3.2.2.jar 57,spring-expression-3.2.2....