JavaでトレースログのON/OFFをコンパイル時に切り替える。

JavaでAndroidのプログラミングに関わるようになってしばらく経ちますが、そろそろトレースログのON/OFFを上手く切り替える方法が欲しくなってくるものです。ベテランのAndroidプログラマーの方に聞いたところ、if文の条件式に定数(static finalで宣言したboolean型のフィールド)を指定することでON/OFFを切り替えるのが普通だといいます。

その方法は、私なりに以下のように解釈しました。

static final boolean ENABLE_LOGS = true;

if (ENABLE_LOGS) Log.v(“tag”, “message”);

見た目はともかく、これならログを無効にしたときには、実行時のコストが完全になくなりそうです。ただ、ON/OFFを切り替えるにはソースファイルをその都度修正する必要があり、これはいただけません。

別の方法として、こういうのもありそうです。

public static boolean trace(String message) {
System.out.println(message);
return true;
}

assert trace(“message”);

こんな用途にassertを使うのは邪道といえば邪道です。しかし、条件付きコンパイルをサポートしないJavaの場合、コンパイル時(または実行時)のオプション指定で、実行時のコストを払うことなくトレースログを除去する方法としては、最適かもしれない気がしてきました。

それと、この方法であれば必ずトレースログ用のメソッドを作成することになるので、普通の標準のいろいろな種類があるログの方式をそのメソッドでラップすることが可能になります。

Androidの開発において、Androidに依存しないコードのテストをホスト上でできるようにするのは必須だと思います。そのとき足かせになるのがログだったりしますので、ログの種類を吸収できるしくみを作っておくのは悪くありません。