Androidのログ出力にファイル名、行番号を付ける

利用シーケンス

こんにちわ。猫好きリーマンのほげPGです。
今回はAndroidでのログ出力について紹介します。


Androidでのログ出力は

  • Log4j
  • Logback
  • Timber

など色々ありますが、
logcatに好みのフォーマット(アプリ単位のタグ、ファイル名:行番号)での出力ができるものがなかった(見つけることが出来なかった)。

ということで自分で作ることにしました。

 

構成は SLF4J –> Adaptor(※1) –> android.util.Log という感じ

※1 今回作成する部分

利用イメージはこんな感じになります。

利用シーケンス

 

作成クラスは org.slf4j:slf4j-android:jar:1.7.21をベースに3クラスほど。

AndroidLoggerFactory ロガーのファクトリー。タグを加工しないように修正
AndroidLoggerAdapter ロガークラス。Android.util.Logに出力のメッセージにファイル名、行番号を追加。
AndroidLoggerConfig ロガー設定クラス。フォーマットやタグを設定する。

使用サンプルはこんな感じ

public class HogeApplication extends Application {
    private static final Logger logger = LoggerFactory.getLogger(HogeApplication.class);
    @Override
    public void onCreate() {
        super.onCreate();
        AndroidLoggerConfig config = AndroidLoggerConfig.getInstance();
        config.setTag("hoge");
        config.setHead("(%F:%L) %m:");
        config.setRootLevel(Log.DEBUG);
        config.setLevel("org.apache", Log.ERROR);
        config.setLevel("jp.co.ois.android.hogeroid", Log.VERBOSE);
        logger.info("version: {}, {}", BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME);
    }
}

なんとなくLog4jぽくレベル設定もできるようにしました。
出力例)

11-16 17:39:40.180 3053-3053/jp.co.ois.android.hogeroid I/hoge: (HogeApplication.java:22) onCreate: version: 1, 1.0
11-16 17:39:40.202 3053-3053/jp.co.ois.android.hogeroid D/hoge: (MainActivity.java:16) onCreate: called.
11-16 17:39:40.217 3053-3053/jp.co.ois.android.hogeroid V/hoge: (MainActivity.java:18) onCreate: trace

これでソースコードへジャンプできます。
slf4j-android-log.jarとプロジェクトを以下に置きます。
http://www.ois-yokohama.co.jp/oisblog/file/slf4j-android-log-1.0.jar
http://www.ois-yokohama.co.jp/oisblog/file/MyApplication.zip

時間があったらGitHubへアップします…。

次回はAndroidアプリの起動処理を題材にScene Producer パターンのサンプルを作成します。


2016/11/21
githubへアップしました。
https://github.com/geobardi/slf4j-android

build.gradle の設定は以下になります。

repositories {
    maven { url 'http://geobardi.github.io/maven/' }
}
dependencies {
    compile 'jp.co.ois.android:slf4j-android:1.7.21'
}

 
オリエンタルインフォーメイションサービス(OIS)

\ 最新情報をチェック /