AndroidアプリのLogCatを端末に保存するサンプルコード

AndroidアプリのLogcatを端末に保存する方法を解説します。

保存したログファイルは、アプリ自身で表示したり、PCからUSB接続経由で確認したりできますので、不具合調査などに役立つかと思います。

コピペ利用できるサプルソースを掲載しているので、良ければご利用ください。

目次

AndroidManifest.xmlを修正する

まずは、Logcatをを読み込む権限を追加します。
デフォルトの権限だと読み込めないんです。

下記の一行をAndroidManifest.xmlに追記します。

<uses-permission android:name="android.permission.READ_LOGS"/>

logcatの内容を保存するスレッドクラスのサンプル

Logcatの内容をリアルタイムで監視してテキストファイルへ出力するスレッドクラスを実装します。
下記のソースコードをコピペして利用できます。

スレッドクラス

public class WriteLogThread extends Thread {

    private Context context;

    public WriteLogThread(Context context) {
        this.context = context;
    }

    @Override
    public void run() {
        java.lang.Process proc = null;
        BufferedReader reader = null;
        PrintWriter writer = null;

        final String pId =  Integer.toString(Process.myPid());

        try {
            proc = Runtime.getRuntime().exec(new String[] { "logcat", "-v", "time"});
            reader = new BufferedReader(new InputStreamReader(proc.getInputStream()), 1024);
            String line;
            while ( true ) {
               line = reader.readLine();
               if (line.length() == 0) {
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                    }
                    continue;
               }

               if (line.indexOf(pId) != -1) {

                   try {
                       OutputStream out;
                       out = context.openFileOutput("log.text", Context.MODE_PRIVATE|Context.MODE_APPEND);
                       writer = new PrintWriter(new OutputStreamWriter(out,"UTF-8"));
                       writer.println(line);
                   } catch (Exception e) {
                       e.printStackTrace();
                   } finally {
                       if (writer != null) {
                           writer.close();
                       }
                   }

               }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

あとは、このスレッドをメインの処理からキックして下さい。

Thread wreiteLogThread = new WriteLogThread(getApplicationContext());
wreiteLogThread.start();

これで実装完了です。

処理の内容を簡単に解説

Runtime.getRuntime().exec() を利用してlogcatの内容をBufferedReaderへ読み込む事ができます。
あとは、通常のファイル入出力と一緒ですね。
logcatのログが出るのを常に監視する必要があるので、別スレッドを立てて無限ループで処理させています。

ローカルファイルの中身の確認方法

出力したログファイルは、アプリ内で表示する事も可能です。

実装方法は下記の記事が参考になります。

あわせて読みたい
【Android】ローカルにファイルを保存、書き出し・読込み・削除をする方法 | 桜花満開/テンシホタル Android,アンドロイド,ローカル保存,deleteFile,openFileOutput,openFileInput,サンプルブログラム

外部の記事ですが、【Android】ローカルにファイルを保存、書き出し・読込み・削除をする方法を参考に実装出来ると思います。

PCとUSB接続してログファイルを確認する方法は下記の記事をご覧ください。

まとめ

デバッグ中だとlogcatの内容を確認出来るのですが、運用時にエラーが発生した際にログの内容が確認出来ないんですよね。
この方法でログをローカルに保存しておくと、後からでもログを確認出来るので、不具合の調査に役立ちます。

この記事が少しでも参考になれば幸いです。

最後までお読み頂きありがとうございました。

おすすめ記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次