質問: ■Androidバージョン Android5.1 ■開発環境 Windows7 AndroidStudio2.3 現在Androidスマホアプリを一つ作成しており、任意のタイミングでサービスからlogcatログの監視を開始して、その作成しているアプリのログを端末内のファイルに出力させる機能を実装中です。 ログが吐かれる度に一行ずつファイルに出力させる機能は実装できたのですが、作成しているアプリのみを指定したログの出力ができておりません。 AndroidStudioではパッケージを指定して、表示されるログにフィルタを掛けられると思っているのですが、adb logcatコマンドではそういった事はできないのでしょうか? また代替手法などあるのでしょうか? 宜しくお願い致します。
回答: 手元に環境がなく、未検証の回答で恐縮ですが、、 マニュアルを見る限り、logcat 自体にパッケージ名でフィルタリングする機能はなさそうです。 stackoverflow には 「対象のアプリの PID でフィルタリングする」 という方法が紹介されていましたが、 回答を見る限り Android7.0以上でのみ可能な方法のようで、お使いの環境 (Android5.1) では不可能かもしれません。 私に思いつく代替方法としては、 「作成中のアプリから出力するログのタグ(`Log.d()`や`Log.e()`メソッドの第一引数)を すべて特定の文字列に統一し、logcat コマンドからはそのタグ名でフィルタリングする」 というものです。 具体的な logcat コマンドは、以下のようになるかと思います。 ``` adb logcat 特定の文字列:V *:S ``` もちろん、別のアプリが同じタグでログ出力しているとそれも表示してしまう、というデメリットはありますが、 タグをアプリのパッケージ名にしておけば、そのようなことはまず起きないと思います。 ちなみに > > AndroidStudioではパッケージを指定して、表示されるログにフィルタを掛けられる > > > 理由は、おそらく 指定したパッケージ名から PID を割り出し(`pidof <パッケージ名>`でわかるはず)、 さらに出力されたログの中に含まれる PID を解析してフィルタリングしているのだと思われます。 > > threadtime (default): Display the date, invocation time, priority, tag, **PID**, and TID of the thread issuing the message. > > >