0

バンドルがosgiで例外をスローした場合、スタックトレースはosgiコンソールに出力されます。バンドルが例外をスローした場合に通知を受け取りたい。osgiロギングサービスを使用すると役立つと思いました。しかし、Heliosの下で動作させることができませんでした。

  • 問題は、バンドルがosgiHeliosで例外をスローした場合にどのように通知できるかです。

  • または、osgiロギングが機能する場合、Heliosでosgiロギングを機能させるにはどうすればよいですか?私がグーグルで検索した限り、現在heliosに統合されているosgilogginサービスの実装は明らかにありません。バンドルorg.eclipse.equinox.logを含むeclipseサイトからequinoxskd3.6をダウンロードしましたが、プラグインへの依存関係として追加するか、osgiランタイムにインストールすることができました。

どんな助けでも本当にありがたいです。

4

2 に答える 2

1

バンドルは、呼び出されたときにのみ例外をスローできます。これはほとんどの場合、他のバンドルが公開されたサービスの 1 つを呼び出した場合、またはバンドルが などのフレームワークからコールバックを受信した場合に発生しますBundleActivator.start()

最初のケースでは、OSGi は例外が発生したことを知る方法がまったくありません! サービスの呼び出しは、2 つのオブジェクト間の直接的なメソッド呼び出しであり、OSGi フレームワークによって仲介またはプロキシされることはありません。したがって、例外について知りたい場合は、呼び出し元のコードでキャッチする必要があります。

2 番目のケースでは、一部のバンドルがコールバックを発生させたため、コールバックが発生します。たとえば、他のバンドルが を呼び出したために、バンドルが開始されBundle.start()ます。この場合、メソッドからスローされた例外は、呼び出し元のコードでキャッチできるBundleActivator.start()にラップされます。BundleException

したがって、サービスを呼び出したり、バンドルを開始/停止したりするサードパーティのバンドル (Web コンソールや GoGo などのシェルなど) がない限り、すべてはコード次第です。この場合、それはサードパーティのコードにかかっています。ほとんどの場合、LogService にメッセージを送信する必要があるため、ログ バンドルをフレームワークにインストールする必要があります

あなたはログ バンドルをインストールできないと言いましたが、なぜ失敗したのか、エラー メッセージは何だったのかなどはわかりませんでした。この種の情報は、問題の解決に役立ちたい場合に重要です。

于 2012-01-16T00:14:43.207 に答える
0

Pax Loggingカスタム Log4Jアペンダーを試すことができます。Pax Logging は、OSGi LogService などの実装と、一般的なログ フレームワークのラッパーを提供します。

例外をログに記録/通知するためだけにこれを行いたいですか、それとも他の理由がありますか? UncaughtExceptionHandlerは、独自のコードまたはラップされたコードを管理する場合に必要場合があります。

于 2012-01-15T12:49:26.540 に答える