ログ(Logcat出力)をdebug/releaseビルドでon/offする

投稿日:  更新日:

Androidシステムはログを収集する仕組み(android.util.Log)を備えています。この仕組みを使えば、アプリケーションの処理の流れや、内部の状態を逐次出力できるので、デバッグ作業に役立ちます。

ですが…

リリース時は不要(リリース後の不具合解析で必要になるもの以外)です。

なので、リリースの前にログ出力の記述を無効にしますが、数が多いと大変な作業になります。

今回、debug/releaseビルドの切り替えで、自動的にログ出力をon/offできるようにしたので紹介します。

スポンサーリンク

Androidシステムのログ

Androidシステムにはログを収集する仕組み(android.util.Log)を備えています。

収集する(Logクラス)

Logクラスを使います。

使用する関数(e/w/i/d/v)を切り替えることで、ログへレベル(重要度)を付けることが出来ます。

Log重要度(優先度?)意味
Log.e(tag, msg)






Error(エラー)
Log.w(tag, msg)Warning(警告)
Log.i(tag, msg)Information(情報)
Log.d(tag. msg)Debug(デバッグ)
Log.v(tag, msg)Verbose(詳細)
※tag:String型、通常クラス名を記述、23文字以内
※msg:String型、メッセージ
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.i("MainActivity", "onCreate")
    }

モニターする(Logcat)

収集されたログを表示するモニターをLogcatと言います。

adbを使う

adb(Android Debug Bridge)は「SDK Platform-Tools」に含まれています。

「エミュレータが起動している」または「USBで端末が接続されている」状態でlogcatコマンドを発行します。

> adb logcat | grep MainActivity
    :
01-06 11:08:46.786  4488  4488 I MainActivity: onCreate
01-06 11:08:46.787  4488  4488 I MainActivity: onStart
01-06 11:08:46.789  4488  4488 I MainActivity: onResume
01-06 11:08:46.929  1706  1727 I ActivityManager: Displayed com.example/.MainActivity: +315ms

「SDK Platform-Tools」が無ければここからダウンロードが可能です。

Android Studioを使う

Android Studioは標準でLogcatモニターを持っています。

Logcatモニター

タブが無ければViewメニューから開きます。

ViewメニューからLogcatを開く

スポンサーリンク

debug/releaseビルドでon/offの切り替え

ログはアプリケーションの内部情報です。ログは誰でも見る事ができるので、内部情報を広く一般へ公開していることになります。セキュリティ面で良いと言えません。

また、端末のリソース(CPU/メモリー/ストレージ/バッテリー)を浪費します。

なので、リリースの前にログ出力をoffにします。これはログの出力箇所が多いと大変な作業になります。

幸いなことに「BuildConfig.DEBUG」というフラグが、debugビルド:true、releaseビルド:falseを返します。これを条件にログ出力をon/offすれば自動化できます。

次のような関数を用意してLogクラスの記述を置き換えます。

inline fun logV(tag: String, msg: String) { if(BuildConfig.DEBUG) Log.v(tag, msg) }
inline fun logD(tag: String, msg: String) { if(BuildConfig.DEBUG) Log.d(tag, msg) }
inline fun logI(tag: String, msg: String) { if(BuildConfig.DEBUG) Log.i(tag, msg) }
inline fun logW(tag: String, msg: String) { if(BuildConfig.DEBUG) Log.w(tag, msg) }
inline fun logE(tag: String, msg: String) { if(BuildConfig.DEBUG) Log.e(tag, msg) }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Log.i("MainActivity", "onCreate")
		logI("MainActivity", "onCreate")
    }
スポンサーリンク
スポンサーリンク