Skip to content

Commit f01078b

Browse files
committed
Use a feature flag to decide whether logs should be printed to logcat or not
This is done so it can be temporarily enabled on release builds for quick debugging sessions, then disabled again.
1 parent b73c447 commit f01078b

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

app/src/main/kotlin/io/element/android/x/di/AppBindings.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import io.element.android.features.rageshake.api.reporter.BugReporter
1616
import io.element.android.libraries.core.meta.BuildMeta
1717
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
1818
import io.element.android.libraries.di.AppScope
19+
import io.element.android.libraries.featureflag.api.FeatureFlagService
1920
import io.element.android.libraries.matrix.api.tracing.TracingService
2021
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
2122
import io.element.android.services.analytics.api.AnalyticsService
@@ -40,5 +41,7 @@ interface AppBindings {
4041

4142
fun enterpriseService(): EnterpriseService
4243

44+
fun featureFlagService(): FeatureFlagService
45+
4346
fun buildMeta(): BuildMeta
4447
}

app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import android.system.Os
1212
import androidx.startup.Initializer
1313
import io.element.android.features.rageshake.api.reporter.BugReporter
1414
import io.element.android.libraries.architecture.bindings
15+
import io.element.android.libraries.featureflag.api.FeatureFlags
1516
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
1617
import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration
1718
import io.element.android.x.di.AppBindings
@@ -28,9 +29,10 @@ class TracingInitializer : Initializer<Unit> {
2829
val bugReporter = appBindings.bugReporter()
2930
Timber.plant(tracingService.createTimberTree(ELEMENT_X_TARGET))
3031
val preferencesStore = appBindings.preferencesStore()
32+
val featureFlagService = appBindings.featureFlagService()
3133
val logLevel = runBlocking { preferencesStore.getTracingLogLevelFlow().first() }
3234
val tracingConfiguration = TracingConfiguration(
33-
writesToLogcat = true,
35+
writesToLogcat = runBlocking { featureFlagService.isFeatureEnabled(FeatureFlags.PrintLogsToLogcat) },
3436
writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
3537
logLevel = logLevel,
3638
extraTargets = listOf(ELEMENT_X_TARGET),

libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,14 @@ enum class FeatureFlags(
168168
defaultValue = { true },
169169
isFinished = false,
170170
),
171+
PrintLogsToLogcat(
172+
key = "feature.print_logs_to_logcat",
173+
title = "Print logs to logcat",
174+
description = "Print logs to logcat in addition to log files. Requires an app restart to take effect." +
175+
"\n\nWARNING: this will make the logs visible in the device logs and may affect performance. " +
176+
"It's not intended for daily usage in release builds.",
177+
defaultValue = { buildMeta -> buildMeta.buildType != BuildType.RELEASE },
178+
// False so it's displayed in the developer options screen
179+
isFinished = false,
180+
)
171181
}

0 commit comments

Comments
 (0)