`
diudiu3721
  • 浏览: 10432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

OSGi使用日志服务

阅读更多

网络上很多例子,都不完整,这里整理一下.   

 

由于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接口:

 

  1. package test;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import org.apache.log4j.LogManager;  
  6. import org.apache.log4j.PropertyConfigurator;  
  7. import org.osgi.framework.BundleActivator;  
  8. import org.osgi.framework.BundleContext;  
  9.   
  10. public class CoreActivator implements BundleActivator {  
  11.   
  12.     public void start(BundleContext context) throws Exception {  
  13.         Properties props = new Properties();  
  14.         props.load(CoreActivator.class.getResourceAsStream("log4j.properties"));   //log4j.properties 放到该类的同一目录,避免log4j自动识别,无法手动管理
  15.           
  16.         PropertyConfigurator.configure(props);  
  17.     }  
  18.   
  19.     public void stop(BundleContext context) throws Exception {  
  20.         LogManager.shutdown();  
  21.     }  
  22.   
  23. }  

log4j配置文件

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE
#log4j.rootCategory=INFO, CONSOLE, LOGFILE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %l %x %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
#log4j.appender.LOGFILE=org.apache.log4j.FileAppender
#log4j.appender.LOGFILE.File=asf.log
#log4j.appender.LOGFILE.Append=true
#og4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#log4j.logger.com.alisoft.aep.sip.analyzer=INFO,CONSOLE,LOGFILE

 

 

接下来是重点:

MANIFEST.MF:输出包org.slf4j 

 

其他插件需要用日志服务的,需要依赖日志Bundle即可。

然后:

  1. import org.slf4j.Logger;  
  2. import org.slf4j.LoggerFactory;  
  3.   
  4. public class TestClass{  
  5.     private static Logger log = LoggerFactory.getLogger("TestClass");  
  6.   
  7.     public void doThings(){  
  8.         log.info("doThings()");  
  9.     }  
  10. }  
分享到:
评论
1 楼 beijishiqidu 2014-01-15  
按照你说的,根本就配置不起来么。。。

接下来是重点:
MANIFEST.MF:输出包org.slf4j

我们slf4j的包都分开了。。。

相关推荐

    基于OSGi的分布式系统集中日志管理方案.pdf

    这意味着系统管理员可以随时卸载这个OSGi插件,让应用回到使用原始的本地日志存储方式。这种方法的优点在于它的灵活性和便利性,可以根据需要快速切换日志管理策略。 方案的应用结果表明,对于并发访问达到1000个...

    OSGI 实例eclipse插件开发

    5. `osgi_serviceImpl`:这可能是一个自定义的OSGI服务实现,它定义了服务接口和其实现,可以在OSGI环境中提供和使用。 6. `osgi_service`和`osgi_use`:这两个可能是与OSGI服务相关的模块。`osgi_service`可能包含...

    tomcat-osgi压缩包

    - **调试与日志**:利用OSGi提供的工具进行服务的调试和日志记录,以便于问题排查。 总之,"tomcat-osgi"的集成提供了一个强大的平台,允许开发者构建高度模块化、可扩展和动态的Java应用程序。通过深入理解和熟练...

    osgi gemini blueprint环境

    Gemini Blueprint是OSGi环境中用于管理服务和组件的一种工具,它基于Spring Blueprint规范,提供了在OSGi容器中使用Spring应用上下文的功能。 这篇名为“osgi gemini blueprint环境”的博文可能详细阐述了如何配置...

    基于OSGi的面向服务的组件编程.pdf

    通过OSGi服务注册,用户管理模块可以发现并使用资源管理模块的服务,同时日志记录模块可以监听并记录所有模块的操作,而无需直接引用它们。这样的设计使得系统容易扩展,如果需要添加新功能,只需添加新的Bundle即可...

    基于osgi构建小例子

    一旦配置完成,你可以直接在Eclipse中运行这个OSGi应用,观察Bundle的状态变化(如启动、暂停、停止等),并通过日志输出或断点调试来了解其运行过程。 7. **动态更新** OSGi的一大优势是能够在运行时更新Bundle...

    spring-osgi 入门手册和代码

    - **调试和监控**:使用 OSGi 控制台或日志工具进行应用的调试和监控。 4. **最佳实践** - **模块设计**:合理划分模块,避免跨 bundle 的直接依赖,以提高可重用性和可维护性。 - **版本管理**:遵循严格的版本...

    OSGi Web示例工程

    10. **安全性**:OSGi环境中也需要考虑安全策略,如限制bundle的权限,控制服务访问,以及使用SslContexts确保网络通信的安全。 学习和实践OSGi Web示例工程有助于理解如何在模块化环境中构建和管理复杂的Web应用,...

    OSGI常用通信实例

    使用OSGI的开发和调试可能涉及到命令行工具(如`osgish`),日志查看器来跟踪服务生命周期,以及特殊的调试器或插件。理解如何有效地利用这些工具对于理解和解决问题至关重要。 通过学习这个实例,开发者不仅能...

    OSGi基本原理pdf (by 静默虚空 )

    OSGi联盟开发了多个公共功能的标准组件接口,包括HTTP服务器、配置、日志、安全、用户管理和XML等。这些接口通过插件的形式存在,以适应不同计算机服务提供商的不同优化和使用成本。 OSGi框架从概念上可以分为三个...

    OSGI错误分析解决

    2. 理解服务生命周期:确保在正确的时间和条件下使用服务。 3. 检查服务注册和引用:确保服务提供者和消费者之间的通信正确无误。 4. 利用开发工具:如IDEA或Eclipse的OSGI插件进行调试和管理。 5. 考虑心跳机制:...

    osgi-core技术文档与说明

    在OSGi中,服务是指一组具有明确目的的代码和数据的集合,例如日志服务、用户界面服务等。服务可以被动态地发布、注册、查找、绑定和取消绑定。服务层的实现依赖于模块层和生命周期层,因为服务实际上是在模块中实现...

    OSGi与Equinox 创建高度模块化的Java系统 第4章完整源码

    7. **调试与日志**:熟悉在OSGi环境中如何进行调试,以及如何配置和使用日志服务来记录bundle的运行情况。 8. **动态性与版本管理**:理解OSGi的动态性,如何在运行时更新和替换bundle,以及版本管理的重要性,如何...

    OSGI中Hibernate扩展在felix中的应用

    8. **Logging Integration**:Felix通常使用LogService进行日志记录,因此需要确保Hibernate的日志输出与之兼容。 9. **JPA支持**:如果使用JPA(Java Persistence API),需要确保JPA提供者如EclipseLink或OpenJPA...

    OSGi Service Platform Core Specification

    3. **服务层**:描述了 OSGi 服务注册中心的工作原理,以及如何在 Bundle 之间提供、查找和使用服务。 4. **动态性与模块化**:深入探讨了 OSGi 如何支持系统的动态性和模块化,使得开发者可以在不停机的情况下对...

    一个关于osgi的例子

    3. **服务** - OSGi服务是可发现、可注册和可使用的对象,它们通过Service Registry进行管理,使得模块之间能动态共享功能。 4. **依赖管理** - OSGi通过manifest.mf文件中的Import-Package和Export-Package头来管理...

    osgi-tutorial.zip

    确保正确配置了日志服务,以便于追踪服务的生命周期和交互。 通过以上步骤,我们可以构建一个既具有Spring灵活性又具备OSGi模块化优势的企业应用。值得注意的是,随着Java EE和微服务架构的发展,OSGi和Spring的...

Global site tag (gtag.js) - Google Analytics