From 4a66e02986a8733e10c2c17a3a0e0bcf28fc4a88 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 23 Jan 2026 14:43:55 +0100 Subject: [PATCH 1/5] ADD kermit dependency feature/template-199-kermit-logger --- build.module.library.gradle | 5 +++-- gradle/libs.versions.toml | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/build.module.library.gradle b/build.module.library.gradle index bc209cc4..b74d42f4 100644 --- a/build.module.library.gradle +++ b/build.module.library.gradle @@ -13,5 +13,6 @@ android { } dependencies { - implementation(libs.napier) -} \ No newline at end of file + implementation(libs.napier) // todo remove + implementation(libs.kermit) // todo libs should not use Kermit directly, create abstraction AppLogger, probably in a new module +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c754e541..5f3f8935 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] jvmTarget = "21" +kermit = "2.0.8" kotlin = "2.2.20" # should match kotlin https://github.com/google/ksp/releases gradlePlugin = "8.11.2" @@ -27,6 +28,7 @@ licensee = "1.14.1" [libraries] junit = { module = "junit:junit", version.ref = "junit" } +kermit = { module = "co.touchlab:kermit", version.ref = "kermit" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" } mockk-agent = { module = "io.mockk:mockk-agent", version.ref = "mockkAndroid" } From 897924fa009be63cbe0bfcb426ef28e9884f4171 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 23 Jan 2026 15:57:49 +0100 Subject: [PATCH 2/5] ADD initial usage of Kermit feature/template-199-kermit-logger --- .../kotlin/nl/q42/template/MainApplication.kt | 20 ++++-- ...yticsLogger.kt => CrashlyticsLogWriter.kt} | 63 +++++++------------ build.module.feature-and-app.gradle | 3 +- .../composables/window/ColumnScreenContent.kt | 2 +- .../home/main/presentation/HomeViewModel.kt | 2 + 5 files changed, 41 insertions(+), 49 deletions(-) rename app/src/main/kotlin/nl/q42/template/logging/{CrashlyticsLogger.kt => CrashlyticsLogWriter.kt} (58%) diff --git a/app/src/main/kotlin/nl/q42/template/MainApplication.kt b/app/src/main/kotlin/nl/q42/template/MainApplication.kt index 9134ca14..7ec31c75 100644 --- a/app/src/main/kotlin/nl/q42/template/MainApplication.kt +++ b/app/src/main/kotlin/nl/q42/template/MainApplication.kt @@ -2,20 +2,25 @@ package nl.q42.template import android.app.Application import android.os.StrictMode +import co.touchlab.kermit.LogcatWriter +import co.touchlab.kermit.Logger +import co.touchlab.kermit.Severity import com.google.firebase.crashlytics.FirebaseCrashlytics -import io.github.aakira.napier.DebugAntilog -import io.github.aakira.napier.Napier import nl.q42.template.di.initDependencyInjection -import nl.q42.template.logging.CrashlyticsLogger +import nl.q42.template.logging.CrashlyticsLogWriter class MainApplication : Application() { override fun onCreate() { super.onCreate() + Logger.setTag("Template") + if (BuildConfig.DEBUG) { FirebaseCrashlytics.getInstance().isCrashlyticsCollectionEnabled = false - Napier.base(DebugAntilog()) + + Logger.setMinSeverity(Severity.Verbose) + Logger.setLogWriters(LogcatWriter()) StrictMode.setThreadPolicy( StrictMode.ThreadPolicy.Builder() @@ -27,7 +32,12 @@ class MainApplication : Application() { ) } else { FirebaseCrashlytics.getInstance().isCrashlyticsCollectionEnabled = true - Napier.base(CrashlyticsLogger()) + + Logger.setMinSeverity(Severity.Warn) + Logger.setLogWriters( + LogcatWriter(), + CrashlyticsLogWriter() + ) } initDependencyInjection(this) diff --git a/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogger.kt b/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt similarity index 58% rename from app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogger.kt rename to app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt index 15c69d63..b4cf602f 100644 --- a/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogger.kt +++ b/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt @@ -1,11 +1,10 @@ package nl.q42.template.logging import android.util.Log +import co.touchlab.kermit.LogWriter +import co.touchlab.kermit.Severity import com.google.firebase.Firebase import com.google.firebase.crashlytics.crashlytics -import io.github.aakira.napier.Antilog -import io.github.aakira.napier.LogLevel -import nl.q42.template.BuildConfig import io.github.aakira.napier.Napier /** A value suitable for Crashlytics @@ -13,30 +12,23 @@ import io.github.aakira.napier.Napier * In theory, the message sent to Crashlytics could therefore be 2x this value */ private const val MAX_CHARS_IN_LOG = 1200 -private const val DEFAULT_TAG = "AppLogger" -/** A Crashlytics logger. The name Antilog might be an unfortunate choice by the Napier library; - * this is not a stub +/** + * A Crashlytics logger. Logs Severity.Error as Non-Fatal and less severe messages will be added + * to the next crashlytics event (crash, non-fatal or ANR) as breadcrumbs */ -class CrashlyticsLogger : Antilog() { - override fun performLog( - priority: LogLevel, - tag: String?, - throwable: Throwable?, - message: String? +class CrashlyticsLogWriter : LogWriter() { + override fun log( + severity: Severity, + message: String, + tag: String, + throwable: Throwable? ) { - if (message == null && throwable == null) return - val safeTag = tag ?: DEFAULT_TAG - - if (BuildConfig.DEBUG || priority > LogLevel.DEBUG) { - logToLogcat(priority, safeTag, message, throwable) - } + val limitedMessage = + message.take(MAX_CHARS_IN_LOG) // to avoid OutOfMemoryError's - val limitedMessage = message?.take(MAX_CHARS_IN_LOG) ?: "(no message)" // to avoid OutOfMemoryError's - - // at least one of message or throwable is not null - if (priority < LogLevel.ERROR) { + if (severity < Severity.Error) { val errorMessage = throwable?.let { " with error: ${throwable}: ${throwable.message}".take(MAX_CHARS_IN_LOG) } ?: "" @@ -46,29 +38,12 @@ class CrashlyticsLogger : Antilog() { Firebase.crashlytics.recordException( throwable ?: buildCrashlyticsSyntheticException( limitedMessage, - safeTag + tag ) ) } } - private fun logToLogcat( - priority: LogLevel, - tag: String, - message: String?, - throwable: Throwable? - ) { - val msg = message ?: "" - when (priority) { - LogLevel.VERBOSE -> Log.v(tag, msg, throwable) - LogLevel.DEBUG -> Log.d(tag, msg, throwable) - LogLevel.INFO -> Log.i(tag, msg, throwable) - LogLevel.WARNING -> Log.w(tag, msg, throwable) - LogLevel.ERROR -> Log.e(tag, msg, throwable) - LogLevel.ASSERT -> Log.wtf(tag, msg, throwable) - } - } - /** Strip the stacktrace so that the calls implementing error logging are removed and the actual * code that called Napier.e() remains. * @@ -80,7 +55,10 @@ class CrashlyticsLogger : Antilog() { val numToRemove = 9 val lastToRemove = stackTrace.getOrNull(numToRemove - 1) if (lastToRemove == null) { - Log.e(tag, "Got unexpected stacktrace while logging a message: ${stackTrace.contentToString()}") + Log.e( + tag, + "Got unexpected stacktrace while logging a message: ${stackTrace.contentToString()}" + ) return SyntheticException(message, stackTrace) } if (lastToRemove.className != Napier::class.java.name || lastToRemove.methodName != "e\$default") { @@ -89,7 +67,8 @@ class CrashlyticsLogger : Antilog() { "Got unexpected stacktrace: class: ${lastToRemove.className}, method: ${lastToRemove.methodName}" ) } - val abbreviatedStackTrace = stackTrace.takeLast(stackTrace.size - numToRemove).toTypedArray() + val abbreviatedStackTrace = + stackTrace.takeLast(stackTrace.size - numToRemove).toTypedArray() return SyntheticException(message, abbreviatedStackTrace) } } diff --git a/build.module.feature-and-app.gradle b/build.module.feature-and-app.gradle index d3c61092..db135a23 100644 --- a/build.module.feature-and-app.gradle +++ b/build.module.feature-and-app.gradle @@ -31,7 +31,8 @@ android { dependencies { implementation project(':core:utils') - implementation(libs.napier) + implementation(libs.napier) // todo remove + implementation(libs.kermit) implementation(libs.activityCompose) implementation(libs.koin) diff --git a/core/ui/src/main/kotlin/nl/q42/template/ui/compose/composables/window/ColumnScreenContent.kt b/core/ui/src/main/kotlin/nl/q42/template/ui/compose/composables/window/ColumnScreenContent.kt index fd75c007..3df7ac1b 100644 --- a/core/ui/src/main/kotlin/nl/q42/template/ui/compose/composables/window/ColumnScreenContent.kt +++ b/core/ui/src/main/kotlin/nl/q42/template/ui/compose/composables/window/ColumnScreenContent.kt @@ -67,4 +67,4 @@ private fun ColumnScreenContentPreview() { } }, ) -} \ No newline at end of file +} diff --git a/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt b/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt index 86dd67c2..c9e10de8 100644 --- a/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt +++ b/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt @@ -2,6 +2,7 @@ package nl.q42.template.home.main.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import co.touchlab.kermit.Logger import io.github.aakira.napier.Napier import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -48,6 +49,7 @@ class HomeViewModel( } fun onLoadClicked() { + Logger.i { "onLoadClicked" } fetchUser() } From 83063e07acad295f27270788a36d5afbdcbf0cd3 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 23 Jan 2026 16:46:49 +0100 Subject: [PATCH 3/5] REMOVE remaining Napier occurrences feature/template-199-kermit-logger --- app/proguard-rules.pro | 6 --- .../kotlin/nl/q42/template/MainActivity.kt | 6 +-- .../template/logging/CrashlyticsLogWriter.kt | 41 +------------------ .../actionresult/data/ActionResultMapper.kt | 4 +- .../network/logger/JsonFormattedHttpLogger.kt | 10 ++--- .../data/main/remote/UserRemoteDataSource.kt | 4 +- .../home/main/presentation/HomeViewModel.kt | 3 +- 7 files changed, 14 insertions(+), 60 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a26f75c8..1ee89823 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -27,9 +27,3 @@ } ## END enums - -## START napier --keep class io.github.aakira.napier.** { - *; -} -## END napier \ No newline at end of file diff --git a/app/src/main/kotlin/nl/q42/template/MainActivity.kt b/app/src/main/kotlin/nl/q42/template/MainActivity.kt index 690e879a..1b33dd12 100644 --- a/app/src/main/kotlin/nl/q42/template/MainActivity.kt +++ b/app/src/main/kotlin/nl/q42/template/MainActivity.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController -import io.github.aakira.napier.Napier +import co.touchlab.kermit.Logger import nl.q42.template.core.utils.config.AppScheme import nl.q42.template.navigation.Destination import nl.q42.template.navigation.homeGraph @@ -40,7 +40,7 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() // must be called before super.onCreate super.onCreate(savedInstanceState) - Napier.d { "onCreate received, ${intent.data}" } + Logger.d { "onCreate received, ${intent.data}" } setContent { @@ -77,7 +77,7 @@ class MainActivity : ComponentActivity() { override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) - Napier.d { "onNewIntent received, ${intent.data}" } + Logger.d { "onNewIntent received, ${intent.data}" } } diff --git a/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt b/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt index b4cf602f..9f266326 100644 --- a/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt +++ b/app/src/main/kotlin/nl/q42/template/logging/CrashlyticsLogWriter.kt @@ -1,11 +1,9 @@ package nl.q42.template.logging -import android.util.Log import co.touchlab.kermit.LogWriter import co.touchlab.kermit.Severity import com.google.firebase.Firebase import com.google.firebase.crashlytics.crashlytics -import io.github.aakira.napier.Napier /** A value suitable for Crashlytics * This value is used to truncate the user-defined message and the exception message @@ -36,48 +34,11 @@ class CrashlyticsLogWriter : LogWriter() { } else { Firebase.crashlytics.log("recordException with message: $limitedMessage") Firebase.crashlytics.recordException( - throwable ?: buildCrashlyticsSyntheticException( + throwable ?: Exception( limitedMessage, - tag ) ) } } - /** Strip the stacktrace so that the calls implementing error logging are removed and the actual - * code that called Napier.e() remains. - * - * This is a workaround for the fact that Crashlytics groups errors by stacktrace - * [https://stackoverflow.com/a/59779764](https://stackoverflow.com/a/59779764) - */ - private fun buildCrashlyticsSyntheticException(message: String, tag: String): Exception { - val stackTrace = Thread.currentThread().stackTrace - val numToRemove = 9 - val lastToRemove = stackTrace.getOrNull(numToRemove - 1) - if (lastToRemove == null) { - Log.e( - tag, - "Got unexpected stacktrace while logging a message: ${stackTrace.contentToString()}" - ) - return SyntheticException(message, stackTrace) - } - if (lastToRemove.className != Napier::class.java.name || lastToRemove.methodName != "e\$default") { - Log.e( - tag, - "Got unexpected stacktrace: class: ${lastToRemove.className}, method: ${lastToRemove.methodName}" - ) - } - val abbreviatedStackTrace = - stackTrace.takeLast(stackTrace.size - numToRemove).toTypedArray() - return SyntheticException(message, abbreviatedStackTrace) - } -} - -class SyntheticException( - message: String, - private val abbreviatedStackTrace: Array -) : Exception(message) { - override fun getStackTrace(): Array { - return abbreviatedStackTrace - } } diff --git a/core/actionresult/src/main/kotlin/nl/q42/template/actionresult/data/ActionResultMapper.kt b/core/actionresult/src/main/kotlin/nl/q42/template/actionresult/data/ActionResultMapper.kt index 542cda46..620bb109 100644 --- a/core/actionresult/src/main/kotlin/nl/q42/template/actionresult/data/ActionResultMapper.kt +++ b/core/actionresult/src/main/kotlin/nl/q42/template/actionresult/data/ActionResultMapper.kt @@ -1,7 +1,7 @@ package nl.q42.template.actionresult.data +import co.touchlab.kermit.Logger import com.haroldadmin.cnradapter.NetworkResponse -import io.github.aakira.napier.Napier import kotlinx.coroutines.CancellationException import kotlinx.serialization.SerializationException import nl.q42.template.actionresult.domain.ActionResult @@ -66,7 +66,7 @@ private fun NetworkResponse.networkResponseToActi val errorMessage = "Received NetworkResponse.UnknownError with response code $statusCode and header ${this.headers}" val error = this.error val exception = IOException(errorMessage, error) - Napier.w(error) { "NetworkResponse.UnknownError" } + Logger.w(error) { "NetworkResponse.UnknownError" } when { error is SerializationException -> { // (usually json) parsing error ActionResult.Error.InvalidErrorResponse(error) diff --git a/core/network/src/main/kotlin/nl/q42/template/core/network/logger/JsonFormattedHttpLogger.kt b/core/network/src/main/kotlin/nl/q42/template/core/network/logger/JsonFormattedHttpLogger.kt index 4c4b8e99..6e8c06ec 100644 --- a/core/network/src/main/kotlin/nl/q42/template/core/network/logger/JsonFormattedHttpLogger.kt +++ b/core/network/src/main/kotlin/nl/q42/template/core/network/logger/JsonFormattedHttpLogger.kt @@ -1,6 +1,6 @@ package nl.q42.template.core.network.logger -import io.github.aakira.napier.Napier +import co.touchlab.kermit.Logger import okhttp3.logging.HttpLoggingInterceptor import org.json.JSONException import org.json.JSONObject @@ -11,10 +11,10 @@ import org.json.JSONObject class JsonFormattedHttpLogger : HttpLoggingInterceptor.Logger { override fun log(message: String) { if (message.startsWith("{") || message.startsWith("[")) try { - Napier.d { JSONObject(message).toString(4) } + Logger.d { JSONObject(message).toString(4) } } catch (e: JSONException) { - Napier.d { message } + Logger.d { message } } - else Napier.d { message } + else Logger.d { message } } -} \ No newline at end of file +} diff --git a/data/main/src/main/kotlin/nl/q42/template/data/main/remote/UserRemoteDataSource.kt b/data/main/src/main/kotlin/nl/q42/template/data/main/remote/UserRemoteDataSource.kt index 965bfe8b..141a3600 100644 --- a/data/main/src/main/kotlin/nl/q42/template/data/main/remote/UserRemoteDataSource.kt +++ b/data/main/src/main/kotlin/nl/q42/template/data/main/remote/UserRemoteDataSource.kt @@ -1,6 +1,6 @@ package nl.q42.template.data.main.remote -import io.github.aakira.napier.Napier +import co.touchlab.kermit.Logger import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import nl.q42.template.actionresult.data.mapToActionResult @@ -25,7 +25,7 @@ internal class UserRemoteDataSource( } is ActionResult.Error -> { - Napier.e(apiActionResult.throwable) { "getUser failed" } + Logger.e(apiActionResult.throwable) { "getUser failed" } apiActionResult } } diff --git a/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt b/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt index c9e10de8..110f3e0a 100644 --- a/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt +++ b/feature/home/src/main/kotlin/nl/q42/template/home/main/presentation/HomeViewModel.kt @@ -3,7 +3,6 @@ package nl.q42.template.home.main.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import co.touchlab.kermit.Logger -import io.github.aakira.napier.Napier import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -54,7 +53,7 @@ class HomeViewModel( } fun onOpenSecondScreenClicked() { - Napier.e { "Open Second Screen tapped. This will be shown In LogCat and on prod builds also as as the title of a Non-Fatal event" } + Logger.e { "Open Second Screen tapped. This will be shown In LogCat and on prod builds also as as the title of a Non-Fatal event" } navigateTo(Destination.HomeSecond(title = "Hello world!")) } From 2bdb80919428c7abb40bbdc0631aaa3f07e19ed0 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 3 Feb 2026 10:03:31 +0100 Subject: [PATCH 4/5] REMOVE Napier dependency feature/template-199-kermit-logger --- README.MD | 2 +- build.module.feature-and-app.gradle | 1 - build.module.library.gradle | 3 +-- gradle/libs.versions.toml | 2 -- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/README.MD b/README.MD index 1c17512c..485a5875 100644 --- a/README.MD +++ b/README.MD @@ -328,7 +328,7 @@ because it is fast, modern and has IDE integration (which warns you when you for @Serializable annotations). It also has multiplatform support, so we can use it in our KMP projects as well. -We use Napier because it's usage is close to Timber/Tolbaaken, but Napier supports KMM. +We use Kermit because it's usage is close to Timber/Tolbaaken, but Kermit supports KMM. We use Crashlytics for crash reporting. Note that Google Analytics is not added. Google [recommends] (https://firebase.google.com/docs/crashlytics/get-started?platform=android#before-you-begin) diff --git a/build.module.feature-and-app.gradle b/build.module.feature-and-app.gradle index db135a23..715feed4 100644 --- a/build.module.feature-and-app.gradle +++ b/build.module.feature-and-app.gradle @@ -31,7 +31,6 @@ android { dependencies { implementation project(':core:utils') - implementation(libs.napier) // todo remove implementation(libs.kermit) implementation(libs.activityCompose) implementation(libs.koin) diff --git a/build.module.library.gradle b/build.module.library.gradle index b74d42f4..b6d69143 100644 --- a/build.module.library.gradle +++ b/build.module.library.gradle @@ -13,6 +13,5 @@ android { } dependencies { - implementation(libs.napier) // todo remove - implementation(libs.kermit) // todo libs should not use Kermit directly, create abstraction AppLogger, probably in a new module + implementation(libs.kermit) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f3f8935..9403af53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,6 @@ retrofit = "3.0.0" kotlinx-serialization = "1.9.0" retrofit2KotlinxSerializationConverter = "1.0.0" networkResponseAdapter = "5.0.0" -napier = "2.7.1" composeNavigation = "2.9.5" okhttp = "5.2.1" composePlatform = "2025.10.00" @@ -39,7 +38,6 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa networkResponseAdapter = { module = "com.github.haroldadmin:NetworkResponseAdapter", version.ref = "networkResponseAdapter" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } okhttpLogging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } -napier = { module = "io.github.aakira:napier", version.ref = "napier" } composeUIGraphics = { module = "androidx.compose.ui:ui-graphics" } composeUITooling = { module = "androidx.compose.ui:ui-tooling" } composeUIToolingPreview = { module = "androidx.compose.ui:ui-tooling-preview" } From c42bfe789e6f4dc835d73501a5428371442f778f Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 6 Feb 2026 14:21:37 +0100 Subject: [PATCH 5/5] CHANGE release logging level from Warn to Info feature/template-199-kermit-logger --- app/src/main/kotlin/nl/q42/template/MainApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/nl/q42/template/MainApplication.kt b/app/src/main/kotlin/nl/q42/template/MainApplication.kt index 7ec31c75..0b404f04 100644 --- a/app/src/main/kotlin/nl/q42/template/MainApplication.kt +++ b/app/src/main/kotlin/nl/q42/template/MainApplication.kt @@ -33,7 +33,7 @@ class MainApplication : Application() { } else { FirebaseCrashlytics.getInstance().isCrashlyticsCollectionEnabled = true - Logger.setMinSeverity(Severity.Warn) + Logger.setMinSeverity(Severity.Info) Logger.setLogWriters( LogcatWriter(), CrashlyticsLogWriter()