diff --git a/timber/src/main/java/timber/log/Timber.kt b/timber/src/main/java/timber/log/Timber.kt index 85a551b26..99e8a60b9 100644 --- a/timber/src/main/java/timber/log/Timber.kt +++ b/timber/src/main/java/timber/log/Timber.kt @@ -200,10 +200,11 @@ class Timber private constructor() { Tree::class.java.name, DebugTree::class.java.name ) + protected open val customIgnoredClassNameList = emptyList() override val tag: String? get() = super.tag ?: Throwable().stackTrace - .first { it.className !in fqcnIgnore } + .first { it.className !in (fqcnIgnore+customIgnoredClassNameList) } .let(::createStackElementTag) /** diff --git a/timber/src/test/java/timber/log/TimberTest.kt b/timber/src/test/java/timber/log/TimberTest.kt index cbfecf236..a68ae2faf 100644 --- a/timber/src/test/java/timber/log/TimberTest.kt +++ b/timber/src/test/java/timber/log/TimberTest.kt @@ -19,6 +19,7 @@ import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertTrue import org.junit.Assert.fail import org.robolectric.shadows.ShadowLog.LogItem +import timber.log.loggerfacade.LoggerFacade @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE) @@ -26,7 +27,6 @@ class TimberTest { @Before @After fun setUpAndTearDown() { Timber.uprootAll() } - // NOTE: This class references the line number. Keep it at the top so it does not change. @Test fun debugTreeCanAlterCreatedTag() { Timber.plant(object : Timber.DebugTree() { @@ -304,6 +304,28 @@ class TimberTest { .hasNoMoreMessages() } + @Test fun debugTreeTagNameIsFacadeClassNameWhenTimberCallsAreCalledInsideFacadeClass() { + Timber.plant(Timber.DebugTree()) + LoggerFacade.d("te%st") + assertLog() + .hasDebugMessage("LoggerFacade", "te%st") //tag name is LoggerFacade + .hasNoMoreMessages() + } + + @Test fun debugTreeTagNameIsClassNameWhereFacadeClassIsCalled() { + val debugTree=object :Timber.DebugTree(){ + override val customIgnoredClassNameList: List + get() = listOf(LoggerFacade::class.java.name) + } + Timber.plant(debugTree) + LoggerFacade.d("te%st") + assertLog() + .hasDebugMessage("TimberTest", "te%st") //tag name is TimberTest + .hasNoMoreMessages() + } + + + @Test fun messageWithException() { Timber.plant(Timber.DebugTree()) val datThrowable = truncatedThrowable(NullPointerException::class.java) diff --git a/timber/src/test/java/timber/log/loggerfacade/LoggerFacade.kt b/timber/src/test/java/timber/log/loggerfacade/LoggerFacade.kt new file mode 100644 index 000000000..b7ba1eb0b --- /dev/null +++ b/timber/src/test/java/timber/log/loggerfacade/LoggerFacade.kt @@ -0,0 +1,10 @@ +package timber.log.loggerfacade + +import timber.log.Timber + +//This is just example facade object that uses Timber for logging +object LoggerFacade{ + fun d(message: String){ + Timber.d(message) + } +}