如何处理OSGi中的不同日志记录解决方案(Apache Felix)

时间:2015-03-05 16:05:53

标签: osgi apache-felix blueprint

在OSGi中,记录前端和实际输出之间存在分离。

因此,通过使用 LogService ,这并不意味着任何内容都会写入控制台。这是 LogReaderService 负责的。

在我当前的运行时中,我是addind org.apache.felix.log ,它带来了一个应该处理输出的LogReaderService-Implementation。但我仍然没有在控制台上看到任何东西......尽管其他捆绑包还有很多其他东西。

在下一步中,我创建了自己的LogListener,它应该由LogServiceReader调用。我刚刚使用了来自this article的代码并调试了Activator以查看是否添加了监听器。仍然没有输出。

最后我检查了Felix属性并设置了 felix.log.level = 3 (信息)但是再次没有输出。 我更想知道的是,尽管设置了Info的水平,我仍然可以看到很多DEBUG-Information?

16:47:46.311 [qtp1593165620-27] DEBUG org.eclipse.jetty.http.HttpParser

在我看来,有不同的日志记录策略,它们使用不同的配置属性。例如,在我将pax-logging-service(使用经典日志记录方法)添加到我的运行时后,我可以看到输出,但是目前我想坚持使用felix-logging。

有人可以解释一下如何禁用Blueprint-Debug-Level,我猜这会引起当前输出,并通过LogService启用简单的felix-logging?必须有一个标准控制台实现即使它未在规范中指定。

1 个答案:

答案 0 :(得分:1)

感谢Christian Schneider和Balazs Zsoldos:这两条评论都非常有用。

要回答这个问题:我需要提供 ServiceTrackerCustomizer ,如Balazs示例here中所示。由于我已经有了一个ConsoleLogListener,因此只需使用TrackerCustomizer注册监听器即可。


由于我目前的任务是迁移一个大型遗留应用程序,我想介绍OSGi,因此使用 Pax-Logging 可能更有意义,因为log4j已经在数百个类中使用了可能不会改为LogService。

可以使用属性 org.ops4j.pax.logging.DefaultServiceLog.level 设置为 INFO

来调整Pax-Logging的输出