关于Felix Log Service

 Apache Felix Log

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 决定是否将调试消息是否保存于历史中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值