由于OSGi每个Bundle都有自己的独立的类加载器,所以如果将Log4j的配置放到一个Bundle中,是不能被其他Bundle共享的,而且也分散了对log的管理,显然不是太好。
比较理想的作法就是单独建立一个Log Bundle,负责处理日志问题,包括加载、关闭、配置等。由于我的项目中涉及到Jetty、Wicket、Hibernate、Spring等这些开源的项目分别使用了Jetty和Wicket使用的是slf4j,而Spring和Hibernate使用了Apache的commons-logging,所以只好使用slf4j作为通用的日志工具,使用Log4j的实现。
因为日志管理属于全局的,所以我将一些全局的东西都打包到一个Bundle中,方便管理。这个Bundle的主要目的就是加载Log4j的配置文件,并管理其生命周期。
首先要添加slf4j-api-1.4.2.jar和slf4j-log4j12-1.4.2.jar,用来让slf4j使用log4j的jar包,当然也不能忘了log4j自身的jar包。新建一个CoreActivator实现BundleActivator接口:
java 代码
- package wanged.core;
-
- import java.util.Properties;
-
- import org.apache.log4j.LogManager;
- import org.apache.log4j.PropertyConfigurator;
- import org.osgi.framework.BundleActivator;
- import org.osgi.framework.BundleContext;
-
- public class CoreActivator implements BundleActivator {
-
- public void start(BundleContext context) throws Exception {
- Properties props = new Properties();
- props.load(CoreActivator.class.getResourceAsStream("/log4j.properties"));
-
- PropertyConfigurator.configure(props);
- }
-
- public void stop(BundleContext context) throws Exception {
- LogManager.shutdown();
- }
-
- }
这就完成了Log4j的加载,下面来配置log4j.properties:
log4j.category.org.springframework=INFO,C
log4j.category.wanged=INFO,C
log4j.category.org.apache.wicket=INFO,C
log4j.category.org.hibernate=INFO,C
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = %-d{HH:mm:ss} [%p] %m%n
因为这里只涉及到Log4j的初始化和清理操作,所以在MANIFEST.MF中只需要导入org.apache.log4j。
现在配置好了,如何使用呢?在需要使用日志的Bundle中,只需要导入包org.slf4j,就可以在程序中使用,示例如下:
java 代码
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- public class TestClass{
- private static final Logger log = LoggerFactory.getLogger(TestClass.class);
-
- public void doThings(){
- log.info("doThings()");
- }
- }
当然如果不喜欢使用Log4j,可以单独修改上面的Bundle,而不会影响到其他使用Log的Bundle,是不是很方便?!
分享到:
- 2007-08-16 12:10
- 浏览 6645
- 评论(4)
- 论坛回复 / 浏览 (4 / 6363)
- 查看更多
相关推荐
在这个“osgi基础demo-搭建servlet”项目中,我们将探讨如何在OSGi环境中创建并运行一个简单的Servlet应用程序。 首先,我们需要理解OSGi的核心概念。OSGi基于服务导向架构,每个模块称为一个Bundle,每个Bundle...
OSGI(Open Services Gateway Initiative)应用程序是一种遵循OSGi规范构建的模块化软件系统。它允许开发者将应用程序拆分成独立的、可热插拔的模块,称为服务或bundle。Eclipse Equinox是OSGI联盟规范的一个实现,...
- **调试与日志**:利用OSGi提供的工具进行服务的调试和日志记录,以便于问题排查。 总之,"tomcat-osgi"的集成提供了一个强大的平台,允许开发者构建高度模块化、可扩展和动态的Java应用程序。通过深入理解和熟练...
使用OSGI的开发和调试可能涉及到命令行工具(如`osgish`),日志查看器来跟踪服务生命周期,以及特殊的调试器或插件。理解如何有效地利用这些工具对于理解和解决问题至关重要。 通过学习这个实例,开发者不仅能...
- **灵活性**:Spring OSGi 可以与现有的 Spring 应用集成,同时利用 OSGi 的优势,提高应用程序的灵活性和可扩展性。 3. **开始使用 Spring OSGi** - **环境准备**:安装一个 OSGi 容器,如 Apache Felix 或 ...
3. **环境搭建**:包括安装和配置OSGi运行时环境(如Equinox或Felix),以及添加Gemini Blueprint相关的库和依赖。 4. **服务组件定义**:描述如何使用XML或注解定义Blueprint服务组件,包括服务接口、实现类和元...
模块化在OSGi中是通过为Jar包添加元数据(metadata)来实现的。元数据定义了哪些类应该被暴露给其他模块,哪些类应该隐藏。因此,jar包的物理边界也成为了运行时逻辑模块的封装边界。每个OSGi的模块被称作一个Bundle...
OSGI是一种模块化系统和Java应用程序执行环境,它允许开发者将应用程序分解为独立的服务组件,而Spring是Java企业级应用开发的主流框架,提供依赖注入和面向切面编程等功能。 描述中的"OSGISpringOSGISpring"可能是...
标题“WPF树状界面-OSGI.net”暗示了这是一个关于Windows Presentation Foundation(WPF)应用程序的开发主题,其中涉及到使用OSGI(Open Services Gateway Initiative)框架来构建用户界面,特别是树形结构的展示。...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序按需加载和卸载组件,实现动态的、可插拔的架构。Jetty是一款轻量级、高性能的HTTP服务器和Servlet容器,它能够直接在OSGi...
OSGi(Open Service Gateway Initiative)是一个模块化平台标准,它提供了一种将应用程序和服务分解为小的、可重用组件的方法。这些组件被称为bundles,它们可以在运行时动态安装、启动、停止和卸载,无需重启整个...
bundles-lib-slf4j-osgi-0.8.4.zip" 和 "java-goinstant-auth.zip" 分别涉及了OSGi模块化、日志抽象和实时协作领域的技术,都是Java开发中的重要工具,尤其适用于构建复杂、模块化且需要安全协作功能的应用程序。
它最初是为了家庭网络环境中的服务集成而设计,但随着时间的发展,OSGI已经成为Java平台上的一个强大模块化系统,广泛应用于企业级应用、嵌入式系统和设备驱动程序开发。 ### OSGI的核心概念 1. **模块系统**: ...
OSGi(Open Services Gateway Initiative)是一种Java平台的模块化系统,它允许开发人员将应用程序分解为独立、可重用的模块,称为服务。Equinox是IBM贡献给Eclipse基金会的一个OSGi实现,它是Eclipse IDE的基础,...
7. **调试和日志**:了解如何在OSGI环境中进行调试,以及如何设置和查看模块的日志输出。 8. **框架选择**:对比Equinox和Felix等不同OSGI实现,了解它们的差异和适用场景。 通过深入研究和实践这个可运行的OSGI...
在OSGI中使用数据库通常涉及创建JDBC驱动服务,确保驱动bundle与应用程序的其他部分正确交互,并且在需要时能够动态地添加、更新或移除数据库连接。 总结来说,解决OSGI错误涉及理解其模块化架构,正确配置服务和...
6. **开发Fragment插件**:Fragment Bundle用于增强其他bundle的功能,例如添加新的日志格式支持。 7. **集成测试**:编写测试用例,验证各模块之间的交互和功能正确性。 8. **启动与打包发布**:理解OSGI容器的启动...
- **调试和日志**:如何有效地调试OSGi环境下的问题,以及如何集成日志框架进行日志记录。 - **部署和打包**:如何正确打包和部署bundle到OSGi容器,以及如何处理bundle间的依赖关系。 - **远程服务**:了解OSGi ...