diff --git a/LogcatCoreLib/build.gradle b/LogcatCoreLib/build.gradle index 2d635a7e..ee663ef2 100644 --- a/LogcatCoreLib/build.gradle +++ b/LogcatCoreLib/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' - api 'com.github.hannesa2:timber:5.0.1.0' + api 'com.github.hannesa2:timber:5.0.1.2' } publishing { diff --git a/LogcatCoreLib/src/main/java/info/hannes/logcat/LoggingApplication.kt b/LogcatCoreLib/src/main/java/info/hannes/logcat/LoggingApplication.kt index 97040a59..cdd350d3 100644 --- a/LogcatCoreLib/src/main/java/info/hannes/logcat/LoggingApplication.kt +++ b/LogcatCoreLib/src/main/java/info/hannes/logcat/LoggingApplication.kt @@ -4,7 +4,7 @@ import android.app.Application import info.hannes.timber.DebugFormatTree import timber.log.Timber -open class LoggingApplication : Application() { +open class LoggingApplication(private val delegator: Class<*>? = null) : Application() { override fun onCreate() { super.onCreate() @@ -14,6 +14,6 @@ open class LoggingApplication : Application() { @Suppress("MemberVisibilityCanBePrivate") protected open fun setupLogging() { LoggingTools.globalErrorCatcher() - Timber.plant(DebugFormatTree()) + Timber.plant(DebugFormatTree(delegator = delegator)) } } diff --git a/LogcatCoreLib/src/main/java/info/hannes/timber/DebugFormatTree.kt b/LogcatCoreLib/src/main/java/info/hannes/timber/DebugFormatTree.kt index 6590dee3..1446831f 100644 --- a/LogcatCoreLib/src/main/java/info/hannes/timber/DebugFormatTree.kt +++ b/LogcatCoreLib/src/main/java/info/hannes/timber/DebugFormatTree.kt @@ -5,7 +5,7 @@ import org.json.JSONObject import timber.log.Timber /* If you use old logcat, e.g Android Studio Electric Eel, you should use for newLogcat a false */ -open class DebugFormatTree(private val newLogcat: Boolean = true) : Timber.DebugTree() { +open class DebugFormatTree(delegator: Class<*>? = null, private val newLogcat: Boolean = true) : Timber.DebugTree(delegator) { private var codeIdentifier = "" @@ -45,6 +45,6 @@ open class DebugFormatTree(private val newLogcat: Boolean = true) : Timber.Debug } if (newLogcat) localMessage = codeIdentifier + localMessage - super.logMessage(priority, tag, localMessage, t, args) + super.logMessage(priority, tag, localMessage, t, *args) } } diff --git a/LogcatCoreLib/src/main/java/info/hannes/timber/FileLoggingTree.kt b/LogcatCoreLib/src/main/java/info/hannes/timber/FileLoggingTree.kt index 6e8c337e..8ef6f8c3 100644 --- a/LogcatCoreLib/src/main/java/info/hannes/timber/FileLoggingTree.kt +++ b/LogcatCoreLib/src/main/java/info/hannes/timber/FileLoggingTree.kt @@ -81,7 +81,7 @@ open class FileLoggingTree(externalCacheDir: File, context: Context? = null, fil } } // Don't call super, otherwise it logs twice - // super.log(priority, tag, message, t) + // super.logMessage(priority, tag, message, t, args) } fun getFileName(): String = file.absolutePath diff --git a/sample/src/main/java/info/hannes/logcat/CustomLogger.kt b/sample/src/main/java/info/hannes/logcat/CustomLogger.kt new file mode 100644 index 00000000..85e3d6df --- /dev/null +++ b/sample/src/main/java/info/hannes/logcat/CustomLogger.kt @@ -0,0 +1,51 @@ +package info.hannes.logcat + +import timber.log.Timber + +class CustomLogger : Logger { + override fun v(message: String) { + Timber.v(message) + } + + override fun v(t: Throwable, message: String) { + Timber.v(t, message) + } + + override fun d(message: String) { + Timber.d(message) + } + + override fun d(t: Throwable, message: String) { + Timber.d(t, message) + } + + override fun i(message: String) { + Timber.i(message) + } + + override fun i(t: Throwable, message: String) { + Timber.i(t, message) + } + + override fun w(message: String) { + Timber.w(message) + } + + override fun w(t: Throwable, message: String) { + Timber.w(t, message) + } + + override fun e(message: String) { + Timber.e(message) + } + + override fun e(t: Throwable, message: String) { + Timber.e(t, message) + } + + override fun trace(owner: Any, message: String) { + if (BuildConfig.DEBUG) { + Timber.wtf(message) + } + } +} diff --git a/sample/src/main/java/info/hannes/logcat/Logger.kt b/sample/src/main/java/info/hannes/logcat/Logger.kt new file mode 100644 index 00000000..2b61c659 --- /dev/null +++ b/sample/src/main/java/info/hannes/logcat/Logger.kt @@ -0,0 +1,22 @@ +package info.hannes.logcat + +import org.jetbrains.annotations.NonNls + +interface Logger { + fun v(@NonNls message: String) + fun v(t: Throwable, @NonNls message: String) + + fun d(@NonNls message: String) + fun d(t: Throwable, @NonNls message: String) + + fun i(@NonNls message: String) + fun i(t: Throwable, @NonNls message: String) + + fun w(@NonNls message: String) + fun w(t: Throwable, @NonNls message: String) + + fun e(@NonNls message: String) + fun e(t: Throwable, @NonNls message: String) + + fun trace(owner: Any, @NonNls message: String = "") +} diff --git a/sample/src/main/java/info/hannes/logcat/sample/CrashlyticApplication.kt b/sample/src/main/java/info/hannes/logcat/sample/CrashlyticApplication.kt index 2ade70d7..7d38330f 100644 --- a/sample/src/main/java/info/hannes/logcat/sample/CrashlyticApplication.kt +++ b/sample/src/main/java/info/hannes/logcat/sample/CrashlyticApplication.kt @@ -6,6 +6,7 @@ import android.os.* import android.provider.Settings import com.google.firebase.crashlytics.FirebaseCrashlytics import info.hannes.crashlytic.CrashlyticsTree +import info.hannes.logcat.CustomLogger import info.hannes.logcat.LoggingApplication import info.hannes.timber.FileLoggingTree import kotlinx.coroutines.CoroutineScope @@ -14,7 +15,9 @@ import kotlinx.coroutines.launch import timber.log.Timber -class CrashlyticApplication : LoggingApplication() { +class CrashlyticApplication : LoggingApplication(delegator = CustomLogger::class.java) { + + private val logger = CustomLogger() @SuppressLint("HardwareIds") override fun onCreate() { @@ -43,15 +46,15 @@ class CrashlyticApplication : LoggingApplication() { } else Timber.w("No valid Firebase key was given") - Timber.d("Debug test") - Timber.i("Info test") - Timber.w("Warning test") - Timber.e("Error test") + logger.d("Debug test") + logger.i("Info test") + logger.w("Warning test") + logger.e("Error test") var x = 0 val runner: Runnable = object : Runnable { override fun run() { - Timber.d("live=$x") + logger.d("live=$x") x++ Handler(Looper.getMainLooper()).postDelayed(this, 3000) }