【发布时间】:2015-05-07 02:06:07
【问题描述】:
在 OSGi 中,日志记录前端和实际输出是分开的。
所以,通过使用LogService,这并不意味着任何东西都会被写入控制台。这就是 LogReaderService 的职责。
在我当前的运行时,我添加了 org.apache.felix.log,它带来了一个应该负责输出的 LogReaderService-Implementation。但我仍然没有在控制台上看到任何东西……尽管其他捆绑包中有很多其他东西。
在下一步中,我创建了自己的 LogListener,它应该由 LogServiceReader 调用。我刚刚使用了this article 的代码并调试了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? 必须有一个标准控制台实现即使它没有在规范中指定。
【问题讨论】:
-
使用LogService的人不多。如果您只需要普通日志记录,请查看 pax-logging。 ops4j1.jira.com/wiki/display/paxlogging/… 它允许在您的代码中简单地使用支持的日志框架之一,并使用 log4j 配置样式配置所有日志记录。
-
我想知道为什么。使用经典日志,我需要为每个使用日志的模块提供某种形式的配置文件,而使用 LogService,我可以写入我需要的任何存储(例如数据库)而不影响客户端。
-
我们使用 felix 日志记录和一个简单的包,该包实现了一个 LogListener 并将每个 LogEntry 转发到 SLF4J(将所有内容记录到控制台)。您可以使用它或在一小时内实现自己的(例如:直接转发到控制台或具有配置选项)。我们的课程在github.com/everit-org/osgi-loglistener-slf4j/blob/master/core/…,您可以从 Maven Central 下载捆绑包。
-
如果您使用普通的 log4j 或其他非 OSGi 框架之一,这是一个很大的痛苦。使用 pax 日志记录,您可以使用所有日志记录 API,而且效果很好。在 karaf 和 camel 等大多数 apache 项目中,我们使用 slf4j API 和 pax 日志记录。
标签: osgi apache-felix blueprint