Loading app/core/src/main/java/com/fsck/k9/K9.kt +1 −0 Original line number Diff line number Diff line Loading @@ -285,6 +285,7 @@ object K9 : EarlyInit { override fun debugSensitive(): Boolean = isSensitiveDebugLoggingEnabled }) com.fsck.k9.logging.Timber.logger = TimberLogger() checkCachedDatabaseVersion(context) Loading app/core/src/main/java/com/fsck/k9/TimberLogger.kt 0 → 100644 +121 −0 Original line number Diff line number Diff line package com.fsck.k9 import android.os.Build import com.fsck.k9.logging.Logger import java.util.regex.Pattern import timber.log.Timber class TimberLogger : Logger { override fun v(message: String?, vararg args: Any?) { setTimberTag() Timber.v(message, *args) } override fun v(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.v(t, message, *args) } override fun v(t: Throwable?) { setTimberTag() Timber.v(t) } override fun d(message: String?, vararg args: Any?) { setTimberTag() Timber.d(message, *args) } override fun d(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.d(t, message, *args) } override fun d(t: Throwable?) { setTimberTag() Timber.d(t) } override fun i(message: String?, vararg args: Any?) { setTimberTag() Timber.i(message, *args) } override fun i(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.i(t, message, *args) } override fun i(t: Throwable?) { setTimberTag() Timber.i(t) } override fun w(message: String?, vararg args: Any?) { setTimberTag() Timber.w(message, *args) } override fun w(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.w(t, message, *args) } override fun w(t: Throwable?) { setTimberTag() Timber.w(t) } override fun e(message: String?, vararg args: Any?) { setTimberTag() Timber.e(message, *args) } override fun e(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.e(t, message, *args) } override fun e(t: Throwable?) { setTimberTag() Timber.e(t) } private fun setTimberTag() { val tag = Throwable().stackTrace .first { it.className !in IGNORE_CLASSES } .let(::createStackElementTag) // We explicitly set a tag, otherwise Timber will always derive the tag "TimberLogger". Timber.tag(tag) } private fun createStackElementTag(element: StackTraceElement): String { var tag = element.className.substringAfterLast('.') val matcher = ANONYMOUS_CLASS.matcher(tag) if (matcher.find()) { tag = matcher.replaceAll("") } // Tag length limit was removed in API 26. return if (tag.length <= MAX_TAG_LENGTH || Build.VERSION.SDK_INT >= 26) { tag } else { tag.substring(0, MAX_TAG_LENGTH) } } companion object { private const val MAX_TAG_LENGTH = 23 private val ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$") private val IGNORE_CLASSES = setOf( Timber::class.java.name, Timber.Forest::class.java.name, Timber.Tree::class.java.name, Timber.DebugTree::class.java.name, TimberLogger::class.java.name, com.fsck.k9.logging.Timber::class.java.name ) } } build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ buildscript { versions = [ 'kotlin': '1.6.10', 'kotlinCoroutines': '1.6.0', 'jetbrainsAnnotations': '23.0.0', 'androidxAppCompat': '1.4.1', 'androidxActivity': '1.4.0', 'androidxRecyclerView': '1.2.1', Loading mail/common/build.gradle +2 −1 Original line number Diff line number Diff line Loading @@ -6,11 +6,12 @@ if (rootProject.testCoverage) { } dependencies { api "org.jetbrains:annotations:${versions.jetbrainsAnnotations}" implementation "org.apache.james:apache-mime4j-core:${versions.mime4j}" implementation "org.apache.james:apache-mime4j-dom:${versions.mime4j}" implementation "com.squareup.okio:okio:${versions.okio}" implementation "commons-io:commons-io:${versions.commonsIo}" implementation "com.jakewharton.timber:timber:${versions.timber}" implementation "com.squareup.moshi:moshi:${versions.moshi}" testImplementation project(":mail:testing") Loading mail/common/src/main/java/com/fsck/k9/logging/Logger.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.fsck.k9.logging /** * Logging abstraction based on Timber. */ interface Logger { fun v(message: String?, vararg args: Any?) fun v(t: Throwable?, message: String?, vararg args: Any?) fun v(t: Throwable?) fun d(message: String?, vararg args: Any?) fun d(t: Throwable?, message: String?, vararg args: Any?) fun d(t: Throwable?) fun i(message: String?, vararg args: Any?) fun i(t: Throwable?, message: String?, vararg args: Any?) fun i(t: Throwable?) fun w(message: String?, vararg args: Any?) fun w(t: Throwable?, message: String?, vararg args: Any?) fun w(t: Throwable?) fun e(message: String?, vararg args: Any?) fun e(t: Throwable?, message: String?, vararg args: Any?) fun e(t: Throwable?) } Loading
app/core/src/main/java/com/fsck/k9/K9.kt +1 −0 Original line number Diff line number Diff line Loading @@ -285,6 +285,7 @@ object K9 : EarlyInit { override fun debugSensitive(): Boolean = isSensitiveDebugLoggingEnabled }) com.fsck.k9.logging.Timber.logger = TimberLogger() checkCachedDatabaseVersion(context) Loading
app/core/src/main/java/com/fsck/k9/TimberLogger.kt 0 → 100644 +121 −0 Original line number Diff line number Diff line package com.fsck.k9 import android.os.Build import com.fsck.k9.logging.Logger import java.util.regex.Pattern import timber.log.Timber class TimberLogger : Logger { override fun v(message: String?, vararg args: Any?) { setTimberTag() Timber.v(message, *args) } override fun v(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.v(t, message, *args) } override fun v(t: Throwable?) { setTimberTag() Timber.v(t) } override fun d(message: String?, vararg args: Any?) { setTimberTag() Timber.d(message, *args) } override fun d(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.d(t, message, *args) } override fun d(t: Throwable?) { setTimberTag() Timber.d(t) } override fun i(message: String?, vararg args: Any?) { setTimberTag() Timber.i(message, *args) } override fun i(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.i(t, message, *args) } override fun i(t: Throwable?) { setTimberTag() Timber.i(t) } override fun w(message: String?, vararg args: Any?) { setTimberTag() Timber.w(message, *args) } override fun w(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.w(t, message, *args) } override fun w(t: Throwable?) { setTimberTag() Timber.w(t) } override fun e(message: String?, vararg args: Any?) { setTimberTag() Timber.e(message, *args) } override fun e(t: Throwable?, message: String?, vararg args: Any?) { setTimberTag() Timber.e(t, message, *args) } override fun e(t: Throwable?) { setTimberTag() Timber.e(t) } private fun setTimberTag() { val tag = Throwable().stackTrace .first { it.className !in IGNORE_CLASSES } .let(::createStackElementTag) // We explicitly set a tag, otherwise Timber will always derive the tag "TimberLogger". Timber.tag(tag) } private fun createStackElementTag(element: StackTraceElement): String { var tag = element.className.substringAfterLast('.') val matcher = ANONYMOUS_CLASS.matcher(tag) if (matcher.find()) { tag = matcher.replaceAll("") } // Tag length limit was removed in API 26. return if (tag.length <= MAX_TAG_LENGTH || Build.VERSION.SDK_INT >= 26) { tag } else { tag.substring(0, MAX_TAG_LENGTH) } } companion object { private const val MAX_TAG_LENGTH = 23 private val ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$") private val IGNORE_CLASSES = setOf( Timber::class.java.name, Timber.Forest::class.java.name, Timber.Tree::class.java.name, Timber.DebugTree::class.java.name, TimberLogger::class.java.name, com.fsck.k9.logging.Timber::class.java.name ) } }
build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ buildscript { versions = [ 'kotlin': '1.6.10', 'kotlinCoroutines': '1.6.0', 'jetbrainsAnnotations': '23.0.0', 'androidxAppCompat': '1.4.1', 'androidxActivity': '1.4.0', 'androidxRecyclerView': '1.2.1', Loading
mail/common/build.gradle +2 −1 Original line number Diff line number Diff line Loading @@ -6,11 +6,12 @@ if (rootProject.testCoverage) { } dependencies { api "org.jetbrains:annotations:${versions.jetbrainsAnnotations}" implementation "org.apache.james:apache-mime4j-core:${versions.mime4j}" implementation "org.apache.james:apache-mime4j-dom:${versions.mime4j}" implementation "com.squareup.okio:okio:${versions.okio}" implementation "commons-io:commons-io:${versions.commonsIo}" implementation "com.jakewharton.timber:timber:${versions.timber}" implementation "com.squareup.moshi:moshi:${versions.moshi}" testImplementation project(":mail:testing") Loading
mail/common/src/main/java/com/fsck/k9/logging/Logger.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.fsck.k9.logging /** * Logging abstraction based on Timber. */ interface Logger { fun v(message: String?, vararg args: Any?) fun v(t: Throwable?, message: String?, vararg args: Any?) fun v(t: Throwable?) fun d(message: String?, vararg args: Any?) fun d(t: Throwable?, message: String?, vararg args: Any?) fun d(t: Throwable?) fun i(message: String?, vararg args: Any?) fun i(t: Throwable?, message: String?, vararg args: Any?) fun i(t: Throwable?) fun w(message: String?, vararg args: Any?) fun w(t: Throwable?, message: String?, vararg args: Any?) fun w(t: Throwable?) fun e(message: String?, vararg args: Any?) fun e(t: Throwable?, message: String?, vararg args: Any?) fun e(t: Throwable?) }