0

如果包在 osgi 中抛出异常,堆栈跟踪将打印在 osgi 控制台上。如果捆绑包引发异常,我希望得到通知。我认为使用 osgi 日志记录服务可以对此有所帮助。但是我无法让它在 Helios 下工作。

  • 问题是如果捆绑包在 osgi Helios 中引发异常,我如何得到通知。

  • 或者,如果 osgi 日志记录有效,我怎样才能让 osgi 日志记录在 Helios 中工作?正如我在谷歌上搜索的那样,目前 helios 中显然没有集成 osgi 登录服务的实现。我从包含包 org.eclipse.equinox.log 的 eclipse 站点下载了 equinox skd 3.6,但是我可以将它作为依赖项添加到我的插件中,或者将其安装在 osgi 运行时中。

非常感谢任何帮助。

4

2 回答 2

1

捆绑包只能在被调用时抛出异常。这几乎总是在某个其他包调用您已发布的服务之一时,或者因为该包从框架接收到回调,例如BundleActivator.start().

在第一种情况下,OSGi 绝对无法知道发生了异常!服务调用是两个对象之间的直接方法调用,不由 OSGi 框架代理或代理。因此,如果您想了解异常,您必须在调用代码中捕获它。

在第二种情况下,回调发生是因为某些捆绑包导致它们发生。例如,一个包将被启动,因为其他一些包名为Bundle.start(). 在这种情况下,从方法抛出的异常BundleActivator.start()将被包装在BundleException调用代码可以捕获的 a 中。

所以这真的完全取决于您的代码,除非您有一些第三方捆绑包调用您的服务或启动/停止您的捆绑包(例如 Web 控制台,或像 GoGo 这样的外壳)。在这种情况下,它取决于第三方代码。在大多数情况下,它们应该向 LogService 发送消息,因此您应该将日志包安装到您的框架中。

你说你不能安装日志包,但你没有说它为什么失败,错误信息是什么等等!如果您需要帮助解决问题,这种信息很重要。

于 2012-01-16T00:14:43.207 回答
0

您可以尝试Pax Logging自定义 Log4J appender - Pax Logging 提供 OSGi LogService 等的实现以及常见日志框架的包装器。

你想这样做纯粹是为了记录/通知异常,还是有其他原因?如果是管理您自己的或包装的代码的情况,则UncaughtExceptionHandler可能是您想要的。

于 2012-01-15T12:49:26.540 回答