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();
はい!これで実装完了です!!
ソースを載せるだけでは味気ないので、簡単にソースの解説をしておきますね。
あとは、通常のファイル入出力と一緒ですね。
logcatのログが出るのを常に監視する必要があるので、別スレッドを立てて無限ループで処理させています。
要点としたらこのくらいでしょうか。
ローカルファイルの中身の確認方法
出力したログファイルは、アプリ内で表示する事も可能です!
外部の記事ですが、【Android】ローカルにファイルを保存、書き出し・読込み・削除をする方法を参考に実装出来ると思います。
また、PCとUSB接続してログファイルを確認する事も出来ます。
確認方法は下記の記事にまとめていますので、よかったらどうぞ!
おわりに
デバッグ中だとlogcatの内容を確認出来るのですが、運用時にエラーが発生した際にログの内容が確認出来ないんですよね。
この方法でログをローカルに保存しておくと、後からでもログを確認出来るので、不具合の調査に役立ちます。
最後までお読み頂きありがとうございました!