有没有办法找出或确定服务与声明式服务绑定的顺序?我的问题是我在我的 OSGI 中运行了一个日志服务以及其他服务。现在,我的组件绑定了这个日志服务和其他一些服务。每次绑定或取消绑定服务时,我都想写一条日志消息。但是,如果服务 A 在我的日志服务之前绑定,则无法写入 A 的日志条目。
我可以以某种方式配置绑定顺序吗?我阅读了有关将服务的绑定策略设置为“静态”的信息,这应该确保首先绑定该服务。但这并不是我想要的。我不希望每次我的日志服务由于某种原因消失时都重新创建我的组件。
有没有办法找出或确定服务与声明式服务绑定的顺序?我的问题是我在我的 OSGI 中运行了一个日志服务以及其他服务。现在,我的组件绑定了这个日志服务和其他一些服务。每次绑定或取消绑定服务时,我都想写一条日志消息。但是,如果服务 A 在我的日志服务之前绑定,则无法写入 A 的日志条目。
我可以以某种方式配置绑定顺序吗?我阅读了有关将服务的绑定策略设置为“静态”的信息,这应该确保首先绑定该服务。但这并不是我想要的。我不希望每次我的日志服务由于某种原因消失时都重新创建我的组件。
我同意下面关于使用 slf4j 的人的看法。
我可以以某种方式配置绑定顺序吗?
很可能不是仅使用声明式服务。
这听起来像是 ServiceTracker 的不错选择。只需将其关闭,直到您的日志记录服务绑定。幸运的是,这与声明式服务非常兼容。
还有 pax-logging,您不绑定到 LogService 而是使用 log4j/slf4j API,因此您可能不必担心 LogService 的生命周期。
还有第三个选项,您在绑定时为每个服务发布一个 OSGI 事件,然后有一个事件侦听器,它将在 LogService 上打印事件,或者将它们排队直到 LogService 可用。不过,这比您可能想要的要多。
您的 DS 运行时可能有一些可选的日志记录或跟踪选项,它们可能有助于了解幕后情况。