Android

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

投稿日:2016年6月29日 更新日:


AndroidアプリLogcatを端末に保存する方法のご紹介です。
サプルソースを掲載してますので、コピペですぐにご自身のアプリに組み込めます!
良かったらご利用下さい!

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

では実装方法の解説です。

スポンサーリンク

AndroidManifest.xmlを修正する

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

下記の一行をAndroidManifest.xmlに追記すればOK。

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

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

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

スレッドクラス

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】ローカルにファイルを保存、書き出し・読込み・削除をする方法を参考に実装出来ると思います。

また、PCとUSB接続してログファイルを確認する事も出来ます。
確認方法は下記の記事にまとめていますので、よかったらどうぞ!

おわりに

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

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

スポンサーリンク


-Android

執筆者:

関連記事

AndroidのローカルファイルをPCから確認する方法

androidのアプリには、アプリ毎のデータの保存領域があります。 この領域に保存したファイルをローカルファイルと言います。 ローカルファイルは、下記のようなディレクトリに保存されます。 /data/ …

MOVERIO(bt-300)にスマホアプリを移植(GoogleMapsは使用不可)

MOVERIO bt-300にAndroidスマホ向けに開発したアプリを移植する際に発生したエラーと解決方法のメモです。 開発環境はEclipse(Kepler)です。 スポンサーリンク 目次ビルドタ …

プロフィール

このサイトを運営しているDENです。
アングラーのフリープログラマー。 主にプログラミングと釣の話を発信しています。
プログラミングで自由になり思う存分に釣りをしまくる生活実践中。
詳しいプロフィールはこちら 
フォスターフリーランス