我正在使用 OSGi 和声明式服务 (DS),目前正在考虑如何正确处理日志记录。由于无论如何我都在使用 DS,因此使用 OSGi 服务纲要指定的 LogService 作为强制性服务参考似乎很自然。我在ekkes 角和nogunners 的博客上阅读了很多内容,但我仍然不清楚:
如何正确区分不同的服务组件(或使用分解组件时的不同服务组件实例)?
如果我查看使用 Logback 的 LogListener 的 nogunners 实现,他使用来自 bundlecontext 的 Bundle-Id 来区分它们。到目前为止还好。但是我将如何区分服务组件?LogService 对象自然包含对 BundleContext 的引用,但是(查看 LogService 接口)必须由用户(实际记录某些内容的人)自己提供 ServiceReference 吗?这对我来说似乎很脆弱。为什么框架不能像它提供 BundleContext 一样提供这个?
当我在做的时候,为什么 OSGi 规范使用详细logger.log(LogService.LOG_INFO,...)
而不是准标准logger.info(...), logger.warn(..)
等?有什么具体原因吗?