在上一篇中,利用了Proxy和在Bundle中加载jar包的方法,对其他的bundle输出log4j的服务,应用log4j输出日志。但是在其中,是回避了在osgi整个环境中加载log4j的问题。从而带来的问题是,在系统应用的其他的框架,利用log4j输入的日志,无法正确的显示出来,这带来了很多的问题,特别是在系统调试时,因为看不到所用框架的日志,就无法正确的判断系统的运行状况。所以,在osgi的整个环境中加载log4j,就显得非常重要了。
在单纯的osgi环境中,利用log4j自带的配置文件读写工具,读写log4j.xml文件,加载日志配置是可以的:
DOMConfigurator.configure("log4j.xml");
但是当把osgi环境嵌入到其他应用程序执行时,就会报一个Appender不能够cast的错误,这个问题是由于osgi环境的host有一个自己的classLoader的环境,其中(很多情况下)是已经加载了log4j的应用类的,当在bundle中开始加载配置时,会首先获得已经实例化的对象,此时就会出现cast的问题。
解决这个问题的方法,是让bundle在自己的classloader体系中,加载所需要的对象,所以,要把读配置文件的classloader环境设置为bundle的classloader环境:
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
DOMConfigurator.configure("log4j.xml");
Logger log = LogManager.getLogger(this.getClass());
System.out.println("hello,test slf4j");
log.debug("hello world. this is slf4j log test.");
Thread.currentThread().setContextClassLoader(cl);
这样就可以在整个osgi环境中,加载log4j的配置,所以应用log4j日志输出的osgi bundle的日志可以正常控制了。
分享到:
相关推荐
NULL 博文链接:https://ouyanggod.iteye.com/blog/1335233
log4j-2.17升级版本包,包括log4j-1.2-api-2.17.1.jar、log4j-api-2.17.1.jar、log4j-core-2.17.1.jar、log4j-slf4j-impl-2.17.1.jar、log4j-web-2.17.1.jar
该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...
在felix2.0.1扩展Hibernate,使之工作于OSGI框架之中。
利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...
OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文OSGi 中文版 中文 OSGi中文
然而,在没有SLF4J 的情况下使用 Logback 是非常罕见的,并且不会在 pax-logging 中实现。 以上三个(及其特定的配置文件语法)由(分别)支持: pax-logging-log4j1 (log4J1) pax-logging-log4j2 (log4J2) pax-...
内容简介: ClassLoader体系结构 类装载器在JVM中并不是唯一的,JVM自带了三个装载器,用户也可以根据自己的需求自定义新的装载器,这些装载器的体系结构可以看作是树状结构,如图1所示:
5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-slf4j-1.7.21-sources.jar 7、osgi-over-slf4j-1.7.21.jar 8、osgi-over-slf4j-1.7.21-sources.jar 9、slf4j-android-1.7.21.jar 10、slf4j-android-1.7.21-...
OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范OSGi R4规范
该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...
osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍osgi介绍
开发一个简单的 OSGi Web 应用实例,如何进行OSGI开发的 实例有利于入门着进行使用
Equinox开发OSGi应用程序
OSGI企业应用开发(十五)基于Spring、Mybatis、Spring MVC实现一个登录应用博文源码
扩展Tomcat支持OSGi应用服务项目文件。其项目为eclipse工程。项目说明请参见我的blog《扩展Tomcat支持OSGi应用服务》:http://blog.163.com/haizai219@126/blog/static/44412555200971223629869/
OSGI企业应用开发(十四)整合Spring、Mybatis、Spring MVC博文源码
讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的讲OSGI应用的
深入理解OSGi:Equinox原理、应用与最佳实践.pdfOSGi应用开发