1

Android でセキュリティ関連のメッセージのロギング メカニズムを実装する予定です。Logクラスのような Android ソース コードで使用できるようにしたいです。SecuLog.log(String msg);

通常のログとは次の点で異なります。

  • DEBUG、INFOなどのレベルはありません...
  • 出力は、デバイス上のファイルに 直接入る必要があります。たとえば、Logcat の出力をリダイレクトする必要はありません。

複数のプロセスがセキュリティ関連のメッセージをログに記録できるため、静的な PrintWriter を使用して com.android.util に LoggingClass を実装するだけで失敗しました。

static {
    try {
        writer = new PrintWriter("data/secu.log");
    } catch (FileNotFoundException e) {
        Log.e(TAG, "Exception initializing SecuLog.", e);
    }
}

Android は複数の dalvik-VM を実行するように設計されており、それらすべてが特定のファイルにアクセスしようとするため、これは機能しませんでした。したがって、ある種のノンブロッキング ファイル I/O が必要です。

logcat 出力を明示的にリダイレクトする必要なく、Android からロギング メカニズムを再利用する方法はありますか?

他のすべてのプロセスから呼び出すことができる単純なファイル ロギング メカニズムを他にどのように実現できますか? ロギングサービスを実装する必要がありますか? このサービスはバインドされたサービスまたは開始されたサービスである必要がありますか? AIDLを使用する必要がありますか?

4

2 に答える 2

0

私の質問へのコメントに従った後、私は次の解決策を選びました:

  • 複数のログ ファイルを作成しました
  • プロセスごとに 1 つのファイル
  • ログファイルのサフィックスとして processId を使用
  • すべてのログをまとめて表示するログ表示アプリを設計しました

私のロギング クラスでは、次のコードを使用しました。

static {
    try {
        File file = new File("data/secu" + android.os.Process.myPid() + ".log");
        file.createNewFile();
        file.setReadable(true, false);
        file.setExecutable(true, false);
        writer = new PrintWriter(file);
    } catch (IOException e) {
        Log.e(TAG, "Exception initializing SecuLog.", e);
    }
}
于 2014-01-08T19:18:15.013 に答える