`
snoopy7713
  • 浏览: 1151578 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

关于Felix Log Service

    博客分类:
  • OSGi
 
阅读更多

OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服务。这是一个非常简单的规范,没有完全提供通常在企业级日志工具中所具有的功能。但其扩展服务模块可以用于建立相当复杂的日志解决方案。 Felix Log是对于OSGI Log服务规范的一个简单的、基于内存的实现。

日志服务规范中定义了4个主要实体:

•org.osgi.service.log.LogService – 用于记录信息的接口,包括日志级别、日志信息、异常等的服务接口

•org.osgi.service.log.LogReaderService – 用于添加移除LogListener实例,检索最近的日志条目

•org.osgi.service.log.LogEntry – 定义日志条目的接口

•org.osgi.service.log.LogListener – 为日志条目定义监听器的接口

1)访问日志服务

要访问一个LogService实例,需要在OSGi的服务记录(service registry)中寻找它。如下代码片段所示:

public
 class
 Activator
 implements
 BundleActivator
{
    public
 void
 start(
BundleContext context)
 throws
 Exception 
    {
   ServiceReference ref =
 context.
getServiceReference
(
LogService.
class
.
getName
());

        if
 (
ref !=
 null
)

        {
  LogService log =
 (
LogService)
 context.
getService
(
ref);

            // Use the log...        }

    }

    //..

2)使用日志

LogService接口提供了4种方法用于日志记录,如下代码片段所示:

public
 interface
 LogService

{

    //..

    // Log a message specifying a log level

    public
 log
(
int
 level,
 java.
lang
.
String
 message)
  
  
  // Log an exception

    public
 log
(
int
 level,
 java.
lang
.
String
 message,
 java.
lang
.
Throwable
 exception)
  
 
  // Log a message specifying the ServiceReference that generated it

    public
 log
(
ServiceReference sr,
 int
 level,
 java.
lang
.
String
 message)
  
   
 // Log a message specifying the ServiceReference and exception

    public
 log
(
ServiceReference sr,
 int
 level,
 java.
lang
.
String
 message,
 java.
lang
.
Throwable
 exception)
  
}
       

日志的级别定义如下:

LogService.LOG_DEBUG

LogService.LOG_INFO

LogService.LOG_WARNING

LogService.LOG_ERROR

3)检索日志条目(log entry)

LogReaderService提供getLog()方法用于检索回一个最近使用的日志条目的列举。如下代码片段展示如何从服务记录中检索它:

ServiceReference ref =
 context.
getServiceReference
(
LogReaderService.
class
.
getName
());

if
 (
ref !=
 null
)

{
    LogReaderService reader =
 (
LogReaderService)
 context.
getService
(
ref);
      
    Enumeration<
LogEntry>
 latestLogs =
 reader.
getLog
();
 }

4)创建并注册一个LogListener

日志服务规范并没有定义任何特别的要存储的条目,或对日志条目进行写;这个功能是由开发者自行定义实现的。为了创建这样的一个bundle,第一步是创建LogListener这个接口的实现,如下代码片段展示了一个回显日志信息的简单实现:

public
 class
 LogWriter
 implements
 LogListener
{

    // Invoked by the log service implementation for each log entry

    public
 void
 logged
(
LogEntry entry)
 
    {

        System.
out
.
println
(
entry.
getMessage
());

    }

}

唯一需要实现的方法是logged(),每一次当一个日志条目在相关日志服务中被创建的时候,这方法将被调用。一个LogListener接口的实现必须与LogReaderService注册才能开始检索日志条目,如下所示:

ServiceReference ref =
 context.
getServiceReference
(
LogReaderService.
class
.
getName
());

if
 (
ref !=
 null
)

{

    LogReaderService reader =
 (
LogReaderService)
 context.
getService
(
ref);

    reader.
addLogListener
(
new
 LogWriter());

}

5)设置 Apache Felix 日志服务

Apache Felix日志服务的bundle对Felix没有任何特定依赖,因此它可以在任何OSGi container上运行。也是通过键值对进行配置;对于它的配置,将使用如下两个可选的系统属性:

Property Default Description org.apache.felix.log.maxSize 100 日志历史的最大值,-1表示没有上限,0表示没有历史记录需要被保留。 org.apache.felix.log.storeDebug false 决定是否将调试消息是否保存于历史中。

分享到:
评论

相关推荐

    felix整合spring

    4. **使用Felix SCR**:Apache Felix Service Component Runtime (SCR)是OSGi服务组件的实现,它允许你在OSGi环境中声明和管理组件。在Spring Bean上使用@Component和@Service等注解,声明它们为OSGi服务。 5. **...

    example-spring-boot-embedded-felix:测试如何将Apache Felix嵌入到Spring Boot应用程序中

    运行嵌入式Apache Felix OSGI容器的示例Spring Boot Web应用程序 ... 创建FelixService作为Spring Service Component和ApplicationReadyEvent事件侦听器以对其进行初始化 配置Felix以加载一些预定

    equinox快速入门

    Equinox提供了`System.out.println`替代品,如`Platform.getLog()`,它可以将日志信息发送到控制台或日志文件。 7. **运行时环境**:为了运行Equinox应用,你需要一个OSGi运行时,如Equinox本身或Felix。你可以通过...

    jbosgi-logging:JBoss OSGi的日志记录功能

    OSGi Log Service遵循OSGi R4规范中的标准接口,允许在OSGi容器内的各个 bundle 之间共享日志功能。这个服务允许bundle发送日志事件,而无需关心具体的日志实现。当JBoss OSGi使用Log Service时,它会将这些日志事件...

    spring-dm-osgi整合jar包

    标题“spring-dm-osgi整合jar包”和描述“spring-dm整合osgi所需所有jar包”提及的核心知识点是Spring Dynamic Modules(简称Spring DM)与OSGi(Open Service Gateway Initiative)框架的集成。这两个技术在Java...

    Jetty中文手册

    Felix中使用Jetty实现HTTP Service PAX中使用Jetty实现HTTP Srevice ProSyst mBedded Server Equinox Edition Spring Dynamic Modules里的Jetty JOnAS5里的Jetty 配置Ajax、Comet和异步Servlets 持续和异步Servlets ...

    osgi-ibatis

    标题 "osgi-ibatis" 暗示了这是一个关于如何在OSGi环境中集成iBatis的示例项目。iBatis是一个流行的SQL映射框架,它允许开发者将SQL语句直接嵌入到Java代码中,以实现数据访问层的操作。而OSGi(Open Service ...

    OSGI错误分析解决

    5. **日志和调试**:利用OSGI容器提供的日志和调试工具,如`org.osgi.service.log`服务,进行深入的错误追踪。 6. **使用工具**:可以借助工具,如Pax Exam进行集成测试,或使用Eclipse PDE插件来可视化bundle和它们...

    spring osgi相关资源

    4. 依赖库:包括了对Apache Felix或Equinox等OSGi容器的适配器,以及一些基础库,如log4j、commons-lang等。 综上所述,Spring OSGi结合了Spring的便利性和OSGi的模块化优势,为Java企业级应用提供了一种高效、灵活...

Global site tag (gtag.js) - Google Analytics