Timber+Log4Jを使ったのでメモ
Kotlinで作成
Log4Jは脆弱性の対象となる前の(1.2.17)を使用
対応した現状の最新版(2.17.1)を使用したかったが,
まだ対応されていない?のかできなかった。
1.buile.gradleに追加
// Log
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'de.mindpipe.android:android-logging-log4j:1.0.3'
implementation 'log4j:log4j:1.2.17'
2.application.ktの作成
var sLog : Logger? = null
override fun onCreate() {
super.onCreate()
initLog4J() // log4jの初期設定
initTimber() // Timberの初期設定
}
private fun initLog4J() {
val f = getFileStreamPath("${getString(R.string.app_name)}.log")
val logConfigurator = LogConfigurator()
logConfigurator.fileName = f.path //ファイル名
logConfigurator.rootLevel = Level.ALL
logConfigurator.setLevel("org.apache", Level.ALL)
logConfigurator.filePattern = "%d %-5p %m%n" //メッセージ内容
logConfigurator.maxFileSize = (512 * 1024).toLong() //ファイルサイズ
logConfigurator.isImmediateFlush = true
logConfigurator.isUseLogCatAppender = false
logConfigurator.maxBackupSize = 1 //ファイル数
logConfigurator.configure()
sLog = Logger.getLogger(Application::class.java)
}
private fun initTimber() {
Timber.plant(Log4JTree())
}
private class Log4JTree : Timber.Tree() {
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
// Error,Warning,Infoのみ出力する
when (priority) {
Log.INFO -> {
sLog?.info(message)
}
Log.WARN-> {
sLog?.warn(message)
}
Log.ERROR -> {
sLog?.error(message)
}
}
}
}
3.使用方法
Timber.d("debug") // ←これは出力されない
Timber.i("info")
Timber.w("warning")
Timber.e("error")