Logcatは、デバイスがエラーをスローしたときのスタックトレースや、Log
クラスを使用してアプリから書き込んだメッセージを含むシステムメッセージのログをダンプするコマンドラインツールです。このページはコマンドラインのlogcatツールに関するものですが、Android StudioのLogcatウィンドウからlogmessagesを表示することもできます。 Android Studioからのログの表示とフィルタリングの詳細については、”logcatを使用したログの書き込みと表示”を参照してください。Androidロギングシステムは、システムプロセスlogd
によって維持される構造化された循環バッファのセットです。
ロギングシステムの概要
Androidロ 使用可能なバッファのセットは、システムによって固定され、定義されます。 最も関連性の高いものは、ほとんどのアプリケーションログを格納するmain
、Android OSからのメッセージを格納するsystem
crash
VERBOSE
DEBUG
INFO
WARNING
ERROR
ERROR
DEBUG
FATAL
)、ログの発信元と実際のログメッセージを識別するタグ。 ログシステムへの主なインタフェースは、共有ライブラリliblog
<android/log.h>
__android_log_write
logd
__android_log_logd_logger
を呼び出します。 APIレベル30以降では、ロギング関数は__android_set_log_writer
を呼び出すことで変更できます。 詳細については、NDKのドキュメントを参照してください。
adb logcat
で表示されるログは、四つのレベルのフィルタリングを受けます。
- コンパイル時のフィルタリング:コンパイル設定に応じて、一部のログがバイナリから完全に削除されることがあります。 たとえば、Proguardは、Javaコードから
Log.d
への呼び出しを削除するように設定できます。 - システムプロパティフィルタリング:
liblog
logd
MyApp
V
D
I
W
すべてのログを無効にするには、E
S
すべてのログを無効にします):
log.tag.MyApp
persist.log.tag.MyApp
persist.log.tag.MyApp
S
log.tag.MyApp
persist.log.tag.MyApp
persist.log.tag
liblog
__android_log_set_minimum_priority
INFO
です。adb logcat
logd
。 詳細は以下をご覧ください。コマンドライン構文
adbシェルを介してlogcatを実行するには、一般的な使用法は次のとおりです: p>
logcat ... ...
logcat
adbコマンドとして、またはエミュレータまたは接続されたデバイスのシェルプロンプトで直接実行できます。 Adbを使用してログ出力を表示するには、SDKplatform-tools/
ディレクトリに移動し、次を実行します。
adb logcat
logcat
logcat
のコマンドラインオプションについて説明しています。/th>
-b <buffer>
events
events
events
events
events
radio
。 デフォルトでは、main
system
crash
バッファセットが使用されます。 代替ログバッファの表示を参照してください。/td>-c, --clear
main
system
crash
-b all -c
を使用します。 -e <expr>, --regex=<expr>
<expr>
<expr>
は正規表現です。-m <count>, --max-count=<count>
<count>
--regex
とペアになることを意図していますが、それ自体で動作します。--print
--regex
--max-count
コンテンツが正規表現フィルタをバイパスできるようにしますが、適切な数の一致/td>-d
<filename>
-f <filename>
<filename>
stdout
です。-g, --buffer-size
-n <count>
<count>
-r
オプションが必要です。/td>-r <kbytes>
<kbytes>
-f
'*:S'
と同等です。 詳細については、ログ出力のフィルタリングに関するセクションを参照してください。 -v <format>
threadtime
形式です。 サポートされている形式の一覧については、制御ログの出力形式に関するセクションを参照してください。 -D, --dividers
-c
-t <count>
-d
機能が含まれています。/td>-t '<time>'
-d
機能が含まれています。 埋め込みスペースを使用したパラメータの引用については、-Pオプションを参照してください。
adb logcat -t '01-26 20:52:41.820'
-T <count>
-d
機能は含まれていません-T '<time>'
-d
機能は含まれません。 埋め込みスペースを使用したパラメータの引用については、-Pオプションを参照してください。
adb logcat -t '01-26 20:52:41.820'
-L, -last
-B, --binary
-S, --statistics
-G <size>
K
M
を追加できます。現在のallow(white
)およびdeny(black
adb logcat -p
-P '<list> ...'
--prune '<list> ...' -P '<white_and_black_list>'
white
)とdeny(black
)リストを書き込み(設定)して、特定の目的のためにロギング内容を調整します。 Allowed(<white>
)とdenied(~<black>
<white>
<black>
は、UID、UID/PID、または/PIDです。 Logcat統計(logcat -S
)からのガイダンスを使用して、allow(white
)とdeny(black
)リストの調整を検討できます。
- UID選択によって特定のロギ誰か(UID)または何か(PID)がこれらのリソースを消費しないようにして、logspanを増やして、診断している問題をより可視化できるようにします。
デフォルトでは、ログシステムは自動的にログ統計の最悪の犯罪者を動的に防止し、新しいログメッセージのためのスペースを確保します。 ヒューリスティックが使い果たされると、システムは新しいメッセージのためのスペースを作るために最も古いエントリを削除します。
allowlist(whitelist
)を追加すると、プロセスのAIDとGIDになるAndroid Id番号(AID)が犯罪者として宣言されなくなり、denylistを追加すると、最悪の犯罪者が考慮される前に 削除の有効性を選択し、削除をオフにして、各ログバッファ内の最も古いエントリからコンテンツのみを削除することができます。
引用符
adb logcat
引用符を保持しないため、allow(white
)とdeny(black
)リストを指定する構文は次のとおりです。
$ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>'
次の例では、pid32676とuid675のallow(white
)リストとpid32677とuid897のdeny(black
)リストを指定します。 デニリストのPID32677は、より高速な剪定のために重み付けされています。
adb logcat -P '"/32676 675 ~/32677 897"'
その他の許可(white
black
)使用できるコマンドのバリエーションは次のとおりです。
~! worst uid blacklist~1000/! worst pid in system (1000)
--pid=<pid> ...
--wrap
フィルタリングログ出力
- ログメッセージのタグは、メッセージの発信元のシステムコンポーネントを示す短い文字列です(例
- 優先度は、次のいずれかの文字値で、最低優先度から最高優先度に順序付けされています。
-
-
V
:Verbose(最li> -
W
:info -
W
: 警告 -
E
:エラー -
F
:致命的 -
S
:サイレント(最高の優先順位、何も印刷されません)
-
タグのリストを取得logcatを実行し、<priority>/<tag>
logcat -v brief output
コマンドで取得した簡単なlogcat出力の例です。 これは、メッセージが優先度レベル”I”とタグ”ActivityManager”に関連していることを示しています:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
ログ出力を管理可能なレベルに減らすには、フィルタ式を使用してログ出力を制限できます。 フィルタ式を使用すると、関心のあるタグ-優先順位の組み合わせ—をシステムに示すことができます。ここで、tag
priority
tag:priority
仕様を指定できます。 一連の仕様は空白で区切られています。
以下は、タグ”ActivityManager”、優先度”Info”以上、およびタグ”MyApp”、優先度”Debug”以上のすべてのログメッセージを除くすべてのログメッセージを抑制するフィルタ式の例です:上記の式の最後の要素である*:S
は、すべてのタグの優先度レベルを”silent”に設定するため、”ActivityManager”と”MyApp”を持つログメッセージのみが表示されます。 *:S
を使用すると、ログ出力が明示的に指定したフィルタに制限されるようにする優れた方法です。
次のフィルター式は、優先度レベル”warning”以上のすべてのログメッセージをすべてのタグに表示します:
adb logcat *:W
開発コンピュータからlogcatを実行している場合(リモートadbシェルで実行する場合)、環境変数ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
ANDROID_LOG_TAGS
リモートシェルからlogcatを実行しているか、adb shell logcat
を使用している場合、フィルタはエミュレータ/デバイスインスタンスにエクスポート
制御ログ出力形式
ログメッセージには、タグと優先度に加えて、多数のメタデータフィールドが含まれています。 メッセージの出力形式を変更して、特定のメタデータフィールドを表示することができます。 これを行うには、-v
オプションを使用し、以下に示すサポートされている出力形式のいずれかを指定します。
-
brief
:メッセージを発行するプロセスの優先度、タグ、およびPIDを表示します。 -
long
:すべてのメタデータフィールドと空白行で個別のメッセージを表示します。 process
-
process
: PIDのみを表示します。 -
raw
:他のメタデータフィールドなしで生のログメッセージを表示します。 -
tag
:優先度とタグのみを表示します。 -
thread:
メッセージを発行するスレッドの優先度、PID、およびTIDを示すレガシー形式。 -
threadtime
(デフォルト):メッセージを発行するスレッドの日付、呼び出し時間、優先度、タグ、PID、およびTIDを表示します。 -
time
:メッセージを発行するプロセスの日付、呼び出し時間、優先度、タグ、およびPIDを表示します。logcatを起動するときに、-v
オプションを使用して必要な出力形式を指定できます。logcat
次の例は、
thread
出力形式でメッセージを生成する方法を示しています。-v
オプションを使用して出力形式を指定できます。logcat
次の例は、
thread
出力形式を示しています。logcat
出力形式を示しています。
adb logcat -v thread
-v
オプションでは1つの出力形式しか指定できませんが、意味のある修飾子をいくつでも指定できます。 Logcatは意味をなさない修飾子を無視します。書式修飾子
書式修飾子は、次の1つ以上の修飾子の任意の組み合わせでlogcat出力を変更します。
書式修飾子は、次の修飾子の フォーマット修飾子を指定するには、次のように
-v
オプションを使用します。adb logcat -b all -v color -d
すべてのAndroidログメッセージには、タグと 任意の書式修飾子を次のいずれかの書式オプションと組み合わせることができます:
brief
long
process
raw
tag
thread
threadtime
, andtime
.You can get the format modifier details by typing
logcat -v --help
at the command line.-
color
: Show each priority level with a different color. -
descriptive
: Show log buffer event descriptions. この修飾子は、イベントログバッファメッセージにのみ影響し、他の非バイナリバッファには影響しません。 イベントの説明は、event-log-tagsデータベースから取得されます。 -
epoch
:Jan1,1970から始まる時間を秒単位で表示します。 -
monotonic
:最後のブートから始まるCPU秒単位の時間を表示します。 -
printable
:バイナリログの内容がエスケープされていることを確認します。 -
uid
:アクセス制御で許可されている場合は、ログに記録されたプロセスのUidまたはAndroid IDを表示します。 -
usec
:マイクロ秒までの精度で時間を表示します。li> -
UTC
:時刻をUTCとして表示します。li> -
year
:表示された時刻に年を追加します。 -
zone
:表示された時刻にローカルタイムゾーンを追加します。
代替ログバッファの表示
Androidのログシステムは、ログメッセージのための複数の循環バッファを保持し、すべてのログメッセージがデフォル 追加のログメッセージを表示するには、
logcat
-b
オプションを指定して実行し、代替循環バッファの表示を要求します。 次の代替バッファのいずれかを表示できます。-
radio
:無線/テレフォニー関連のメッセージを含むバッファを表示します。 -
events
:解釈されたバイナリシステムイベントバッファーメッセージを表示します。 -
main
:メインログバッファー(デフォルト)を表示するには、システムとクラッシュログメッセージが含まれていません。 -
system
: システムログバッファーを表示します(デフォルト)。 -
crash
:クラッシュログバッファーを表示します(デフォルト)。 -
all
:すべてのバッファを表示します。 -
default
main
system
crash
バッファ。
-b
オプションの使用法は次のとおりです。logcat
無線およびテレフォニーメッセージを含むログバッファを表示する方法の例:
adb logcat -b radio
印刷するすべてのバッファに対して複数の
-b
フラグを指定することもできます。logcat -b main -b radio -b events
単一の
-b
フラグをカンマ区切りのバッファリストで指定することができます。p>logcat -b main,radio,events
コードからのロギング
Log
クラスを使用すると、logcatツールに表示されるコード内のログエントリを作成できます。 一般的なロギング方法は次のとおりです:-
Log.v(String, String)
(verbose) -
Log.d(String, String)
(debug) -
Log.i(String, String)
(information) -
Log.w(String, String)
(warning) -
Log.e(String, String)
(error)
For example, using the following call:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
The logcat outputs something like:
I/MyActivity( 1557): MyClass.getView() — get item number 1
-