我在我的应用程序中嵌入了Apache Felix。我想记录框架事件。为了查看框架生命周期早期发生的框架事件,我在启动框架之前注册了一个FrameworkListener。我还想使用日志服务来记录其他事件。问题是,日志服务还提供框架事件。我无法找到一种避免两次记录这些事件的好方法,一次是在传递给我的FrameworkListener时,一次是通过日志服务传递的。
唯一的解决方案似乎是:
另一种方法是,根本不注册FrameworkListener,将日志服务安装为第一个bundle,并假设日志服务将在任何感兴趣的事件之前可靠地启动。 (假设我并不关心日志记录,例如日志服务的注册。)但是如果启动日志服务时出现问题,则此问题将作为FrameworkEvent传递并因此丢失(没有异常被抛到我的顶部-水平)。这将是一个令人头疼的诊断。 (如果日志服务不可用,Apache Felix会向System.err发送错误消息,但这些消息不会转到我应用程序的主日志文件中,因此可能会错过。)
也许解决方案是启动例程,在启动任何其他bundle之前,显式启动日志服务包(以便失败引发异常)。我是在正确的轨道上吗?似乎需要非常小心以确保不会丢失任何错误。一个早期启动阶段,其中所有错误都显示为顶级异常似乎是可取的。