Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 4cbd8424 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #6053 from k9mail/jvm_logging

Replace usages of Timber in mail libraries
parents 6685912c d69c1f4c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ object K9 : EarlyInit {

            override fun debugSensitive(): Boolean = isSensitiveDebugLoggingEnabled
        })
        com.fsck.k9.logging.Timber.logger = TimberLogger()

        checkCachedDatabaseVersion(context)

+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
        )
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -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',
+2 −1
Original line number Diff line number Diff line
@@ -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")
+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