在分离服务组件时如何正确处理OSGi中的日志记录?

时间:2012-05-08 12:43:07

标签: java logging components osgi declarative-services

我正在使用OSGi和声明服务(DS),目前正在考虑如何正确处理日志记录。由于我无论如何都在使用DS,因此使用OSGi服务概要指定的LogService作为强制服务引用似乎很自然。我在ekkes cornernogunners's blog网上阅读了很多内容,但我仍然不清楚:

如何在使用因子组件时正确区分不同的服务组件(或不同的服务组件实例)?

如果我使用Logback查看LogListener的nogunners实现,他使用Bundle-Id形式的bundlecontext来区分它们。好到目前为止。但是,我如何区分服务组件? LogService对象自然包含对BundleContext的引用,但是(查看LogService接口)ServiceReference必须由用户(实际记录的东西)本身给出?这对我来说似乎很脆弱。为什么框架在提供BundleContext时不能提供它?

虽然我在这,但为什么OSGi规范使用详细logger.log(LogService.LOG_INFO,...)而不是准标准logger.info(...), logger.warn(..)等?是否有某些具体原因?

1 个答案:

答案 0 :(得分:4)

没有标准方法来记录组件ID,您必须将其嵌入到消息中。

OSGi日志服务已有14年......决定不升级它,因为已经有太多的日志记录系统。

看看http://team.ops4j.org/wiki/display/paxlogging/Pax+Logging,它们将流行的记录器与OSGi(两种方式)集成在一起。