10

JNI を介して Java アプリで使用されている C++ のライブラリがあります。Java アプリでは、logback を使用してログを生成しています。

ここで、C++ ライブラリ メッセージもログに記録する必要があります。Java で使用されるのと同じファイルにログを記録する必要があるため、すべてを時系列で取得できます。

まだ実装されていない私の現在のアプローチは、JNI を介して Java にメッセージを送信し、Java がこれらのメッセージをログに記録するLoggerという名前の C++ クラスを作成することです。欠点は、スレッドの名前やログを生成したコードの行をログに記録するなどの Logback 機能を失っていることです。

より良い方法はありますか?

4

3 に答える 3

1

簡単な解決策は、syslog などのロギング用の一般的なサービスを使用することです。Java コードで、ログを syslog に書き込むように適切なアペンダーを設定します。C++ コードでは、syslog をネイティブに呼び出すだけです。すべてのログは、syslog によって時系列順に結合されます。

于 2013-07-17T17:17:57.660 に答える
1

私が過去に使用した可能性のある解決策:-

  1. データベース アペンダで logback を使用します。DB は、トランザクションのコミットがタイムスタンプ付きで順番に行われるようにします。一部のデータベースでは、それをトリガーにして、より効率的なネイティブのタイムスタンプを使用できます。

  2. C++ 部分には、同様のアペンダーが必要であり、同じテーブルに書き込むように変更する必要があります。(log4cpp は動作します。独自のものがある場合は、少し変更する必要があるかもしれません)

  3. Select * from table order by timestamp asc をファイルに出力すると、ログが順番に表示されます。

私の最後の場所では、これらのログを保存するために sqlite を使用しました。これは、オラクルやより負荷の高いものに比べてオーバーヘッドが小さく、後で必要に応じてファイルを削除できるためです。

于 2013-07-17T20:56:42.320 に答える
-2
#include <android/log.h> 

...
int error;
...
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error);
...
于 2013-06-26T12:46:13.563 に答える