Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LogcatCoreLib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.7"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.7"
api "com.jakewharton.timber:timber:5.0.1"
api "com.github.hannesa2:timber:5.0.1.3"
}

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 @@ -6,7 +6,7 @@ import timber.log.Timber
import timber.log.Timber.Forest.tag

// 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 = ""
private var method = ""
Expand Down Expand Up @@ -38,7 +38,7 @@ open class DebugFormatTree(private val newLogcat: Boolean = true) : Timber.Debug
}

// if there is an JSON string, try to print out pretty
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
override fun logMessage(priority: Int, tag: String?, message: String, t: Throwable?, vararg args: Any?) {
var localMessage = message.trim()
if (localMessage.startsWith("{") && localMessage.endsWith("}")) {
try {
Expand All @@ -47,6 +47,6 @@ open class DebugFormatTree(private val newLogcat: Boolean = true) : Timber.Debug
} catch (_: JSONException) {
}
}
super.log(priority, tag, "$method: $localMessage", t)
super.logMessage(priority, tag, "$method: $localMessage", t, *args)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ open class FileLoggingTree(externalCacheDir: File, context: Context? = null, fil
init {
externalCacheDir.let {
if (!it.exists()) {
if (!it.mkdirs())
Log.e(LOG_TAG, "couldn't create ${it.absoluteFile}")
if (!it.mkdirs()) Log.e(LOG_TAG, "couldn't create ${it.absoluteFile}")
}
val fileNameTimeStamp = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
file = if (context != null) {
Expand All @@ -46,7 +45,7 @@ open class FileLoggingTree(externalCacheDir: File, context: Context? = null, fil
}

@SuppressLint("LogNotTimber")
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
override fun logMessage(priority: Int, tag: String?, message: String, t: Throwable?, vararg args: Any?) {
try {
val logTimeStamp = SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS", Locale.getDefault()).format(Date())

Expand All @@ -70,10 +69,8 @@ open class FileLoggingTree(externalCacheDir: File, context: Context? = null, fil
}
}

if (Thread.currentThread().name == "main")
_lastLogEntry.value = Event(textLine)
else
Handler(Looper.getMainLooper()).post { _lastLogEntry.value = Event(textLine) }
if (Thread.currentThread().name == "main") _lastLogEntry.value = Event(textLine)
else Handler(Looper.getMainLooper()).post { _lastLogEntry.value = Event(textLine) }

} catch (e: Exception) {
// Log to prevent an endless loop
Expand All @@ -84,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
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class CountlyTree(private val analytics: Analytics, private val serverIgnoreToke
private val t = serverIgnoreToken
private val regex: Regex = "$t.+?$t|$t[^$t]*$".toRegex()

override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
override fun logMessage(priority: Int, tag: String?, message: String, t: Throwable?, vararg args: Any?) {
// we ignore INFO, DEBUG and VERBOSE
if (priority <= Log.INFO) {
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,24 @@ import java.util.concurrent.atomic.AtomicBoolean
@Suppress("unused")
class CrashlyticsTree(private val identifier: String? = null) : Timber.Tree() {

override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
override fun logMessage(priority: Int, tag: String?, message: String, t: Throwable?, vararg args: Any?) {
if (priority < Log.INFO) {
return
}

super.log(priority, tag, message, t)
super.log(priority, tag, message, t, args)

FirebaseCrashlytics.getInstance().setCustomKey("PRIORITY", when (priority) {
// 2 -> "Verbose"
// 3 -> "Debug"
4 -> "Info"
5 -> "Warn"
6 -> "Error"
7 -> "Assert"
else -> priority.toString()
})
FirebaseCrashlytics.getInstance().setCustomKey(
"PRIORITY", when (priority) {
// 2 -> "Verbose"
// 3 -> "Debug"
4 -> "Info"
5 -> "Warn"
6 -> "Error"
7 -> "Assert"
else -> priority.toString()
}
)
tag?.let { FirebaseCrashlytics.getInstance().setCustomKey(KEY_TAG, it) }
FirebaseCrashlytics.getInstance().setCustomKey(KEY_MESSAGE, message)
FirebaseCrashlytics.getInstance().setCustomKey(KEY_UNIT_TEST, isRunningUnitTests.toString())
Expand Down
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
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 = "")
}
Loading