Maybaygiare.org

Blog Network

Logcatコマンドラインツール

Logcatは、デバイスがエラーをスローしたときのスタックトレースや、Logクラスを使用してアプリから書き込んだメッセージを含むシステムメッセージのログをダンプするコマンドラインツールです。このページはコマンドラインのlogcatツールに関するものですが、Android StudioのLogcatウィンドウからlogmessagesを表示することもできます。 Android Studioからのログの表示とフィルタリングの詳細については、”logcatを使用したログの書き込みと表示”を参照してください。Androidロギングシステムは、システムプロセスlogdによって維持される構造化された循環バッファのセットです。

ロギングシステムの概要

Androidロ 使用可能なバッファのセットは、システムによって固定され、定義されます。 最も関連性の高いものは、ほとんどのアプリケーションログを格納するmain、Android OSからのメッセージを格納するsystemcrashVERBOSEDEBUGINFOWARNINGERRORERRORDEBUGFATAL)、ログの発信元と実際のログメッセージを識別するタグ。 ログシステムへの主なインタフェースは、共有ライブラリliblog<android/log.h>__android_log_writelogd__android_log_logd_loggerを呼び出します。 APIレベル30以降では、ロギング関数は__android_set_log_writerを呼び出すことで変更できます。 詳細については、NDKのドキュメントを参照してください。

adb logcatで表示されるログは、四つのレベルのフィルタリングを受けます。

  1. コンパイル時のフィルタリング:コンパイル設定に応じて、一部のログがバイナリから完全に削除されることがあります。 たとえば、Proguardは、JavaコードからLog.dへの呼び出しを削除するように設定できます。
  2. システムプロパティフィルタリング:libloglogdMyAppVDIWすべてのログを無効にするには、ESすべてのログを無効にします):
  • 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_priorityINFOです。
  • 表示フィルタリング:adb logcatlogd。 詳細は以下をご覧ください。
  • コマンドライン構文

    adbシェルを介してlogcatを実行するには、一般的な使用法は次のとおりです: p>

     logcat ... ...

    logcatadbコマンドとして、またはエミュレータまたは接続されたデバイスのシェルプロンプトで直接実行できます。 Adbを使用してログ出力を表示するには、SDKplatform-tools/ディレクトリに移動し、次を実行します。

    adb logcat

    logcatlogcatのコマンドラインオプションについて説明しています。/th>

    オプション 説明 -b <buffer> eventseventseventseventseventsradio。 デフォルトでは、mainsystemcrashバッファセットが使用されます。 代替ログバッファの表示を参照してください。/td> -c, --clear 選択したバッファをクリア(フラッシュ)して終了します。 デフォルトのバッファセットはmainsystemcrash-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 各ログバッファ間の分周器を出力します。/td> -c ログ全体をフラッシュ(クリア)して終了します。/td> -t <count> 最新の行数のみを出力します。 このオプションには、-d機能が含まれています。/td> -t '<time>' 指定された時間以降の最新の行を出力します。 このオプションには、-d機能が含まれています。 埋め込みスペースを使用したパラメータの引用については、-Pオプションを参照してください。

    adb logcat -t '01-26 20:52:41.820'
    -T <count> 指定された時間以降の最新の行数を出力します。 このオプションには-d機能は含まれていません -T '<time>' 指定された時刻以降の最新の行を出力します。 このオプションには、include-d機能は含まれません。 埋め込みスペースを使用したパラメータの引用については、-Pオプションを参照してください。

    adb logcat -t '01-26 20:52:41.820'

    -L, -last 最後の再起動の前にログをダンプします。 -B, --binary バイナリでログを出力します。 -S, --statistics ログスパマーを識別してターゲットにするのに役立つ統計情報を出力に含めます。 -G <size> ログリングバッファーのサイズを設定します。 キロバイトまたはメガバイトを示すために、最後にKMを追加できます。現在のallow(white)およびdeny(black

    adb logcat -p
    -P '<list> ...'
    --prune '<list> ...' -P '<white_and_black_list>'
    allow(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"'

    その他の許可(whiteblack)使用できるコマンドのバリエーションは次のとおりです。

    ~! worst uid blacklist~1000/! worst pid in system (1000)
    --pid=<pid> ... 指定されたpidからのみログを出力します。/td> --wrap バッファがラップしようとしているときに2時間スリープします。 約にラップウェイクアップを提供することにより、ポーリングの効率を向上させます。

    フィルタリングログ出力

    • ログメッセージのタグは、メッセージの発信元のシステムコンポーネントを示す短い文字列です(例
    • 優先度は、次のいずれかの文字値で、最低優先度から最高優先度に順序付けされています。
      • 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...}

    ログ出力を管理可能なレベルに減らすには、フィルタ式を使用してログ出力を制限できます。 フィルタ式を使用すると、関心のあるタグ-優先順位の組み合わせ—をシステムに示すことができます。ここで、tagprioritytag: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ログメッセージには、タグと 任意の書式修飾子を次のいずれかの書式オプションと組み合わせることができます: brieflongprocessrawtagthreadthreadtime, and time.

      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:すべてのバッファを表示します。
      • defaultmainsystemcrashバッファ。

      -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

    コメントを残す

    メールアドレスが公開されることはありません。