Android
ログとログキャストの使用
サーチ…
構文
-
Log.v(String tag, String msg, Throwable tr)
-
Log.v(String tag, String msg)
-
Log.d(String tag, String msg, Throwable tr)
-
Log.d(String tag, String msg)
-
Log.i(String tag, String msg, Throwable tr)
-
Log.i(String tag, String msg)
-
Log.w(String tag, String msg, Throwable tr)
-
Log.w(String tag, String msg)
-
Log.e(String tag, String msg, Throwable tr)
-
Log.e(String tag, String msg)
パラメーター
オプション | 説明 |
---|---|
-b(バッファ) | イベントやラジオなど、表示用に代替ログバッファを読み込みます。メインバッファはデフォルトで使用されます。代替ログバッファの表示を参照してください。 |
-c | ログ全体をクリア(フラッシュ)して終了します。 |
-d | ログを画面にダンプして終了します。 |
-f(ファイル名) | ログメッセージの出力を(ファイル名)に書き込みます。デフォルトはstdoutです。 |
-g | 指定されたログバッファのサイズを出力し、終了します。 |
-n(カウント) | 回転したログの最大数を(count)に設定します。デフォルト値は4です。-rオプションが必要です。 |
-r(kbytes) | ログファイルを出力ごとに回転させます(kbytes)。デフォルト値は16です。-fオプションが必要です。 |
-s | デフォルトのフィルタ仕様を無音に設定します。 |
-v(フォーマット) | ログメッセージの出力形式を設定します。デフォルトは簡単な形式です。 |
備考
定義
Logcatは、デバイスがエラーをスローしたときのスタックトレースや、アプリケーションからLogクラスで書き込んだメッセージなど、システムメッセージのログをダンプするコマンドラインツールです。
いつ使用するか
JavaのSystem.outメソッドをAndroidのLogメソッドの1つではなくコンソールに印刷することを検討している場合は、基本的に同じ方法で動作することを理解する必要があります。しかし、AndroidのLogメソッドが提供する余分な情報とフォーマットがより有益であるため、Javaのメソッドを使わないほうがよいでしょう。また、System.outの印刷メソッドはLog.i()
メソッドにリダイレクトされます。
役に立つリンク
- ログとログ キャストの Android開発者の公式ドキュメント。
- Stackoveflow質問: AndroidのLog.v()、Log.d()、Log.i()、Log.w()、Log.e() - それぞれを使用するタイミングは?
logcat出力のフィルタリング
関心のないメッセージがたくさんあるので、logcatの出力をフィルタリングすると便利です。出力をフィルタリングするには、「Android Monitor」を開き、右上のドロップダウンをクリックし、 「フィルタ設定の編集」を選択します
これで、関心のあるメッセージを表示するカスタムフィルタを追加するだけでなく、安全に無視できる既知のログ行をフィルタすることができます。出力の一部を無視するには、 正規表現を定義することができます。一致するタグを除外する例を次に示します。
^(?!(HideMe|AndThis))
これは次の例で入力できます:
上記は入力を排除する正規表現です。 ブラックリストに別のタグを追加する場合は、パイプの後ろに追加します|
キャラクター。たとえば、「GC」をブラックリストに登録する場合は、次のようなフィルタを使用します。
^(?!(HideMe|AndThis|GC))
詳細については、 LoggingとLogcatの使用を参照してください。
ロギング
どんな高品質のAndroidアプリケーションでも、アプリケーションログを通じて何が行われているかを追跡します。これらのログにより、開発者はアプリケーションの状況を簡単に診断することができます。完全なAndroidドキュメントがここにありますが、要約は次のとおりです:
基本ログ
Log
クラスは、 tag
とmessage
指定することによって、開発者ログを書き込む主要なソースmessage
。このタグは、ログメッセージをフィルタリングして特定のアクティビティから来た行を特定するために使用できるものです。単に電話するLog.v(String tag, String msg);
そして、Androidシステムはlogcatにメッセージを書いてくれます:
07-28 12:00:00.759 24812-24839/my.packagename V/MyAnimator: Some log messages
└ time stamp | app.package┘ | └ any tag |
process & thread ids ┘ log level┘ └ the log message
先端:
プロセスIDとスレッドIDを確認します。それらが同じであれば - ログはメイン/ UIスレッドから来ています!
すべてのタグを使用できますが、クラス名をタグとして使用するのが一般的です。
public static final String tag = MyAnimator.class.getSimpleName();
ログレベル
Androidロガーには6つのレベルがあり、それぞれは特定の目的を果たします。-
ERROR
:Log.e()
- 重大な失敗を示すために使用されます。これは、
Exception
スローするときに出力されるレベルです。
- 重大な失敗を示すために使用されます。これは、
-
WARN
:Log.w()
- 主に回復可能な障害について警告を表示するために使用されます。
-
INFO
:Log.i()
- アプリケーションの状態に関するより高いレベルの情報を示すために使用されます。
-
DEBUG
:Log.d()
- アプリケーションのデバッグ時に知っておくと便利な情報をログに記録するのに使用されますが、アプリケーションの実行時
-
VERBOSE
:Log.v()
- アプリケーションの状態に関する小さな詳細を反映する情報のログに使用されます。
-
ASSERT
:Log.wtf()
- 発生してはならない状態に関する情報を記録するために使用されます。
- wtfは「何がひどい失敗か」を表します。
ロギングの動機
ロギングの動機は、アプリケーションからの一連のイベントを見て、エラーや警告などの情報を簡単に見つけることです。たとえば、テキストファイルから行を読み込むアプリケーションを想像してください。ただし、ファイルが空ではないと誤って想定しています。ログを記録しないアプリケーションのログトレースは、次のようになります。E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
最終的にはデバッガを使用してステップスルーすると、最終的には問題につながる、不安定な行につながる一連のスタックトレースが続きます
ただし、ロギングを有効にしたアプリケーションのログトレースは、次のようになります。
V/MyApplication: Looking for file myFile.txt on the SD card
D/MyApplication: Found file myFile.txt at path <path>
V/MyApplication: Opening file myFile.txt
D/MyApplication: Finished reading myFile.txt, found 0 lines
V/MyApplication: Closing file myFile.txt
...
E/MyApplication: Process: com.example.myapplication, PID: 25788
com.example.SomeRandomException: Expected string, got 'null' instead
ログをすばやく見れば、ファイルが空であることは明らかです。
ロギング時に考慮すべき事項:
ロギングは、Android開発者がアプリケーションの内部作業をより深く理解できる強力なツールですが、ロギングにはいくつかの欠点があります。ログの可読性:
Androidアプリケーションでは、複数のログを同期して実行するのが一般的です。したがって、各ログは読みやすく、関連する必要な情報のみが含まれていることが非常に重要です。パフォーマンス:
ロギングには少量のシステムリソースが必要です。一般に、これは懸念を示すものではありませんが、過度に使用すると、ログがアプリケーションのパフォーマンスに悪影響を与える可能性があります。セキュリティ:
最近、Google PlayマーケットプレイスにいくつかのAndroidアプリケーションが追加され、ユーザーは実行中のすべてのアプリケーションのログを閲覧できます。この意図しないデータ表示により、ユーザーは機密情報を閲覧することができます。大まかには、アプリケーションを市場に公開する前に、公開されていないデータに含まれるログを常に削除してください。結論:
ロギングは、開発者に与える力のために、Androidアプリケーションの不可欠な部分です。有用なログトレースを作成する能力は、ソフトウェア開発の最も困難な側面の1つですが、AndroidのLogクラスは、より簡単にするのに役立ちます。詳細については、 LoggingとLogcatの使用を参照してください。
Logcatから直接ソースへのリンク付きログ
これは、コードへのリンクを追加するうまいトリックなので、ログを発行したコードに簡単にジャンプできます。
次のコードを使用して、この呼び出しを行います。
MyLogger.logWithLink("MyTag","param="+param);
結果:
07-26...012/com.myapp D/MyTag: MyFrag:onStart(param=3) (MyFrag.java:2366) // << logcat converts this to a link to source!
これはコードです(MyLoggerというクラス内)。
static StringBuilder sb0 = new StringBuilder(); // reusable string object
public static void logWithLink(String TAG, Object param) {
StackTraceElement stack = Thread.currentThread().getStackTrace()[3];
sb0.setLength(0);
String c = stack.getFileName().substring(0, stack.getFileName().length() - 5); // removes the ".java"
sb0.append(c).append(":");
sb0.append(stack.getMethodName()).append('(');
if (param != null) {
sb0.append(param);
}
sb0.append(") ");
sb0.append(" (").append(stack.getFileName()).append(':').append(stack.getLineNumber()).append(')');
Log.d(TAG, sb0.toString());
}
これは基本的な例ですが、簡単に拡張して呼び出し元へのリンクを発行することができます(ヒント:スタックは[3]ではなく[4]になります)。
ログキャットの使用
Logcatは、デバイスがエラーをスローしたときのスタックトレースや、アプリケーションからLogクラスで書き込んだメッセージなど、システムメッセージのログをダンプするコマンドラインツールです。
Logcatの出力は、Android StudioのAndroidモニターまたはadbコマンドラインで表示できます。
Android Studioの場合
「Android Monitor」アイコンをクリックして表示: またはMac上でWindows / LinuxまたはCMD + 6にAltキー + 6を押して。
コマンドライン経由で:
簡単な使い方:
$ adb logcat
タイムスタンプ付き:
$ adb logcat -v time
特定のテキストのフィルタリング:
$ adb logcat -v time | grep 'searchtext'
コマンドラインlogcatには 、多くのオプションとフィルタがあり、 ここで説明しています 。
シンプルで便利な例は、すべてのタグに優先度「error」を持つすべてのログメッセージを表示する次のフィルタ式です。
$ adb logcat *:E
ロギングコードの生成
Android Studio
のLive templates
は、簡単なロギングのためのいくつかのショートカットが用意されています。
ライブテンプレートを使用するには、テンプレート名の入力を開始し、 TAB
キーをTAB
か入力してステートメントを挿入するだけです。
例:
-
logi
→→android.util.Log.i(TAG, "$METHOD_NAME$: $content$");
-
$METHOD_NAME$
はあなたのメソッド名に自動的に置き換えられ、カーソルは内容が満たされるのを待ちます。
-
-
loge
→same、エラー - 残りのロギングレベルでは、
テンプレートの完全なリストは、 Android Studio
の設定( ALT + sとタイプ "live")にあります。カスタムテンプレートを追加することも可能です。
Android Studio
のLive templates
が必要でない場合は、 Android Postfix Plugin
これは、ロギング行を手動で書くのを避けるのに役立つ非常に便利なライブラリです。
構文は絶対に単純です:
.log - ロギング。定数変数 "TAG"がある場合、 "TAG"を使用します。それ以外はクラス名を使用します。
Android Studioの使用状況
ログをクリアする
ログ全体を消去(フラッシュ)するには:
adb logcat -c