4

在 OSGi 中,日志前端和实际输出是分开的。

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

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

在下一步中,我创建了自己的 LogListener,它应该由 LogServiceReader 调用。我只是使用了这篇文章的代码,调试了Activator,看看是否添加了监听器。还是没有输出。

最后我检查了 Felix 属性并设置了 felix.log.level=3 (Info) 但同样没有输出。我更想知道的是,尽管将级别设置为信息,我仍然可以看到很多调试信息?

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

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

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

4

1 回答 1

1

感谢 Christian Schneider 和 Balazs Zsoldos:这两个评论都非常有帮助。

要回答这个问题:我需要提供一个ServiceTrackerCustomizer,如 Balazs 示例中所示。因为我已经有了一个 ConsoleLogListener,所以用 TrackerCustomizer 注册监听器就足够了。


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

可以通过将属性org.ops4j.pax.logging.DefaultServiceLog.level设置为INFO来调整 Pax-Logging 的输出

于 2015-03-06T11:51:50.610 回答