Skip to content

Commit

Permalink
Timber with delegation
Browse files Browse the repository at this point in the history
It uses a modifier Timber, which allows to use a delegation logger

This reverts commit 4894135.

Revert "Revert "Demonstrate how to use a delegate class""
This reverts commit 379aa5b.
  • Loading branch information
hannesa2 committed Aug 4, 2023
1 parent 4743b8e commit 0d536dd
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 12 deletions.
2 changes: 1 addition & 1 deletion LogcatCoreLib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -14,6 +14,6 @@ open class LoggingApplication : Application() {
@Suppress("MemberVisibilityCanBePrivate")
protected open fun setupLogging() {
LoggingTools.globalErrorCatcher()
Timber.plant(DebugFormatTree())
Timber.plant(DebugFormatTree(delegator = delegator))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ""

Expand Down Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
51 changes: 51 additions & 0 deletions sample/src/main/java/info/hannes/logcat/CustomLogger.kt
Original file line number Diff line number Diff line change
@@ -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)
}
}
}
22 changes: 22 additions & 0 deletions sample/src/main/java/info/hannes/logcat/Logger.kt
Original file line number Diff line number Diff line change
@@ -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 = "")
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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() {
Expand Down Expand Up @@ -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)
}
Expand Down

0 comments on commit 0d536dd

Please sign in to comment.