Android ログ解析

Android logs caption

Android開発者として、ログ解析が開発の段階であり、時折それに遭遇するというのは皆さんご存知かと思いますが、そのログを解析することは、開発者にとっては、とても重要なことです。
しかし、ログ解析はコード メンテナやサポート エンジニアにとって最大の難関です。

Android 製品が市場に投入され、顧客がそれを使い始めると、ログ解析が始まります。 そして、実際のシナリオでバグや問題が発生し始め、サポート エンジニアやプロジェクト メンテナンス エンジニアの主な仕事は、提供されたログのセットでバグや問題を分析することです。

First We start with the type of Log available on Android Eco-system: –

  • Application Log
  • System Log
  • Event Log
  • Radio Log

Androidログシステムは、次のものから構成されています。

  • ログ メッセージを格納するためのカーネル ドライバーとカーネル バッファ
  • ログ エントリの作成とログ メッセージへのアクセスを行う C、C++、および Java クラスです。
  • Logcat (ログメッセージを表示するためのスタンドアロン プログラム)
  • DDMS (ホスト マシンからログ メッセージを表示およびフィルタする機能)

Android Log Buffer/container

  • main – アプリケーション ログ
  • events – システム イベント情報
  • radio – ラジオおよび電話用
  • Manager – システム イベント情報

  • Radio-ID – ラジオおよび電話用
  • Manager-ID – システム イベント情報
  • Android Log Buffer/container – システム システム イベント情報。関連情報

  • system – 低レベルのシステムメッセージとデバッグ用のログ

What Log message contains:-

ログ内の各メッセージは、

  • メッセージが由来するシステムまたはアプリケーションの部分を示すタグ
  • タイムスタンプ(このメッセージが来た時間)
  • ログ内の各メッセージは、以下の要素から構成されます。 メッセージ ログ レベル (またはメッセージによって表されるイベントの優先度) および
  • ログ メッセージ自体 (エラーまたは例外または情報などの詳細な説明)

各ログ タイプに含まれるもの。-

1. アプリケーションログ

  • android.util.Logを使用します。Logクラスのメソッドを使用して、異なる優先度のメッセージをログに書き込みます
  • Javaクラスはタグを文字列として静的に宣言し、それをlogメソッドに渡します
  • 使用するlogメソッドはメッセージ「深刻度」(またはログレベル)を示します
  • ログが検索ツール(logcat)で処理されるときにメッセージはタグまたは優先度でフィルターできます

〈7752>2. システムログ

  • android.util.Logを使用します。Slog クラスを使用して、関連するメッセージと異なる優先度でメッセージを記述します
  • Many Android framework classes utilize the system log to keep their messages separate from (possibly noisy) application log messages
  • A formatted message is delivered through the C/C++ library down to the kernel driver, which stores the message in the appropriate buffer (system buffer)

3. イベントログ

  • イベントログのメッセージは、バイナリ形式のログメッセージを作成する android.util.EventLog クラスを使用して作成されます。 /system/etc/event-log-tags.
  • 各メッセージには、ログメッセージの文字列と、そのエントリに関連付けられた (格納された) 値を示すコードがあります。

4. 無線ログ

  • 無線や電話(モデム)関連の情報に使用される
  • ログエントリは、バイナリタグのコードとネットワーク情報のメッセージで構成されています
  • ログシステムは自動的に無線バッファに特定のタグでメッセージをルート

Android上のログフォーマット

以下は、Android

tv_sec tv_nsec priority pid tid tag messageLen Message

タグの共通ログフォーマットです。 log tag
tv_sec & tv_nsec: ログメッセージのタイムスタンプ
pid: ログメッセージの送信元のプロセスID
tid: スレッドID
Priorityの値は、以下の文字値のいずれかで、優先度の低いものから高いものへと並びます。
V – Verbose (最も低い優先度)*
D – Debug*
I – Info*
W – Warning*
E – Error*
F – Fatal*
S – Silent (最高の優先度で、何も出力しない)

Log-File locations
There are several directories where log (including those from crash) stores and they are not standardized (i. the same priority, not the same priority, not last priority, not last priority, no priority, not last priority).また、ROM固有のものもあります。)

  • /data/anr : Dalvik は ANR のここにスタックトレースを書き込みます(例.) “Application Not Responding” 別名 “Force-Close”
  • /data/dontpanic : トレースを含むいくつかのクラッシュログを含みます
  • /data/kernelpanics :- “kernel panic” 関連のログを格納します
  • /data/tombstones :- 複数のtombstone_nnファイル(nnは0から10までの数字で、10以降は繰り返し)を保持することができます。 実際のプロジェクトでは、ユーザーデバイスのログをキャプチャして、それを開発者/保守担当者と共有し、分析するために使用されるログキャプチャアプリケーション/ツールもあります。
    • adb logcat (現在のアンドロイドシステムのすべてのタイプのログを表示する
    • adb logcat -v threadtime (it will include date and time)
    • adb logcat -v threadtime > logfile.txt (Logfile.txt のログを保存する)

    Useful filter patterns
    adb コマンドで以下のフィルターを使用してログをフィルターすることが可能です。 1540>

    • adb logcat -f <output_file> すべてのログをファイルに保存
    • adb logcat “*:E” すべてのエラーと致命傷を取得
    • adb logcat | grep -i “foo.example.T” adb logcat “*:E” すべてのログをファイルに保存。 #”foo.example.*”に関連する全てのログを取得 tagname
    • adb logcat “application_or_tag_name:*” “*:S” アプリケーション名ですべてのログを取得
    • adb logcat -b events “gsm_service_state_change” “*:S” すべてのGSM状態の変更を取得
    • adb logcat -b radio すべてのラジオイベントを取得

    ログ分析
    今まで我々はAndroidログシステムのすべての基本的な露出を得ています。 今、あなたのアプリケーションまたはエンドユーザーから来るログを分析する時間です。 ここでは、ログ解析を 2 つのパート

    1. デバッグ ログ: – 開発およびテスト フェーズ中に来るログ ファイル
    2. 生産ログ: – 直接エンドユーザーから来るログ ファイル

    それで、どちらが難しい生産ものだと思いますか? では、デバッグを行い、キャプチャしたログから必要な情報を取得するための最良の方法は何でしょうか? 前述したように、

    • 「有用なフィルタパターン」を使用したり、
    • 何らかのツール(例えばLogRabit、GoogleLogTool、SonyLogTool)を使用することによってそれを行うことができます

    つまり最後のAndroidログ解析は継続的学習と経験の活用プロセスであるわけです。 個人的には、過去の経験を生かし、関連するフィルタやツールを使ってログを解析しました。

    しかし、ひとつ言えることは、Androidの解析(エンドユーザーの問題/バグログ)は、どれも新しい学習と経験を与えてくれるということです。 だから、それを続けて、アンドロイドシステム😎😎😎

    のコーダーとメンテナとしてのあなたの人生を楽しんでください。

コメントを残す

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