From 8b6cd3e1f50ad78d68c14c6d5907dd99a230df6a Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Tue, 28 Oct 2025 19:45:49 +0100 Subject: [PATCH 1/3] Log timber tag as attribute --- .../sentry/android/timber/SentryTimberTree.kt | 9 ++++++-- .../android/timber/SentryTimberTreeTest.kt | 22 ++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt b/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt index 743501d664f..683160010f6 100644 --- a/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt +++ b/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt @@ -3,6 +3,8 @@ package io.sentry.android.timber import android.util.Log import io.sentry.Breadcrumb import io.sentry.IScopes +import io.sentry.SentryAttribute +import io.sentry.SentryAttributes import io.sentry.SentryEvent import io.sentry.SentryLevel import io.sentry.SentryLogLevel @@ -183,7 +185,7 @@ public class SentryTimberTree( captureEvent(level, tag, sentryMessage, throwable) addBreadcrumb(level, sentryMessage, throwable) - addLog(logLevel, message, throwable, *args) + addLog(logLevel, message, tag, throwable, *args) } /** do not log if it's lower than min. required level. */ @@ -240,12 +242,15 @@ public class SentryTimberTree( private fun addLog( sentryLogLevel: SentryLogLevel, msg: String?, + tag: String?, throwable: Throwable?, vararg args: Any?, ) { // checks the log level if (isLoggable(sentryLogLevel, minLogLevel)) { - val params = SentryLogParameters() + val attributes = + tag?.let { SentryAttributes.of(SentryAttribute.stringAttribute("timber.tag", tag)) } + val params = SentryLogParameters.create(attributes) params.origin = "auto.log.timber" val throwableMsg = throwable?.message diff --git a/sentry-android-timber/src/test/java/io/sentry/android/timber/SentryTimberTreeTest.kt b/sentry-android-timber/src/test/java/io/sentry/android/timber/SentryTimberTreeTest.kt index 2e610cf2798..1d0cea40995 100644 --- a/sentry-android-timber/src/test/java/io/sentry/android/timber/SentryTimberTreeTest.kt +++ b/sentry-android-timber/src/test/java/io/sentry/android/timber/SentryTimberTreeTest.kt @@ -334,8 +334,28 @@ class SentryTimberTreeTest { verify(fixture.logs) .log( eq(SentryLogLevel.ERROR), - check { assertEquals("auto.log.timber", it.origin) }, + check { + assertEquals("auto.log.timber", it.origin) + assertEquals(null, it.attributes?.attributes?.get("timber.tag")) + }, eq("My message\nthrowable message"), ) } + + @Test + fun `Tree logs timber tag`() { + val sut = fixture.getSut() + Timber.plant(sut) + Timber.tag("timberTag").i("message") + + verify(fixture.logs) + .log( + eq(SentryLogLevel.INFO), + check { + assertEquals("auto.log.timber", it.origin) + assertEquals("timberTag", it.attributes?.attributes?.get("timber.tag")?.value) + }, + eq("message"), + ) + } } From 53554e10fbb3218da3b06aa427410c8dde21fe64 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Tue, 28 Oct 2025 19:48:55 +0100 Subject: [PATCH 2/3] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f306b28c37..b9fd4a67ce5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Improvements - [ANR] Defer some class availability checks ([#4825](https://github.com/getsentry/sentry-java/pull/4825)) +- Report Timber.tag() as `timber.tag` log attribute ([#4845](https://github.com/getsentry/sentry-java/pull/4845)) ### Dependencies From 517bbced3b72fe863a4fc30da7573b033161d550 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 30 Oct 2025 14:55:01 +0100 Subject: [PATCH 3/3] Update Changelog --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6766dcb0a6f..ec4b964fa9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Improvements + +- Report Timber.tag() as `timber.tag` log attribute ([#4845](https://github.com/getsentry/sentry-java/pull/4845)) + ## 8.25.0 ### Fixes @@ -14,7 +20,6 @@ - [ANR] Defer some class availability checks ([#4825](https://github.com/getsentry/sentry-java/pull/4825)) - Collect PerformanceCollectionData only for sampled transactions ([#4834](https://github.com/getsentry/sentry-java/pull/4834)) - **Breaking change**: Transactions with a deferred sampling decision (`sampled == null`) won't be collecting any performance data anymore (CPU, RAM, slow/frozen frames). -- Report Timber.tag() as `timber.tag` log attribute ([#4845](https://github.com/getsentry/sentry-java/pull/4845)) ### Dependencies