diff --git a/CHANGELOG.md b/CHANGELOG.md index 4da50109..c8945a80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Sentry.init { options -> ``` - Add `Sentry.isEnabled()` API to common code ([#273](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/273)) - Add `enableWatchdogTerminationTracking` in common options ([#281](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/281)) +- Add `diagnosticLevel` in common options ([#287](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/287)) ### Dependencies diff --git a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api index 8f91313e..bcc670c4 100644 --- a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api @@ -169,6 +169,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getBeforeBreadcrumb ()Lkotlin/jvm/functions/Function1; public final fun getBeforeSend ()Lkotlin/jvm/functions/Function1; public final fun getDebug ()Z + public final fun getDiagnosticLevel ()Lio/sentry/kotlin/multiplatform/SentryLevel; public final fun getDist ()Ljava/lang/String; public final fun getDsn ()Ljava/lang/String; public final fun getEnableAppHangTracking ()Z @@ -197,6 +198,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setBeforeBreadcrumb (Lkotlin/jvm/functions/Function1;)V public final fun setBeforeSend (Lkotlin/jvm/functions/Function1;)V public final fun setDebug (Z)V + public final fun setDiagnosticLevel (Lio/sentry/kotlin/multiplatform/SentryLevel;)V public final fun setDist (Ljava/lang/String;)V public final fun setDsn (Ljava/lang/String;)V public final fun setEnableAppHangTracking (Z)V diff --git a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api index 34b8653d..5c2b139d 100644 --- a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api @@ -166,6 +166,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getBeforeBreadcrumb ()Lkotlin/jvm/functions/Function1; public final fun getBeforeSend ()Lkotlin/jvm/functions/Function1; public final fun getDebug ()Z + public final fun getDiagnosticLevel ()Lio/sentry/kotlin/multiplatform/SentryLevel; public final fun getDist ()Ljava/lang/String; public final fun getDsn ()Ljava/lang/String; public final fun getEnableAppHangTracking ()Z @@ -194,6 +195,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setBeforeBreadcrumb (Lkotlin/jvm/functions/Function1;)V public final fun setBeforeSend (Lkotlin/jvm/functions/Function1;)V public final fun setDebug (Z)V + public final fun setDiagnosticLevel (Lio/sentry/kotlin/multiplatform/SentryLevel;)V public final fun setDist (Ljava/lang/String;)V public final fun setDsn (Ljava/lang/String;)V public final fun setEnableAppHangTracking (Z)V diff --git a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt index 9afd3bc1..09bfb3f2 100644 --- a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt +++ b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt @@ -2,6 +2,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.extensions.toAndroidSentryOptionsCallback +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn import kotlin.test.assertContains import kotlin.test.assertEquals @@ -30,6 +31,9 @@ class SentryAndroidOptionsWrapper(private val androidOptions: SentryAndroidOptio override val debug: Boolean get() = androidOptions.isDebug + override val diagnosticLevel: SentryLevel + get() = androidOptions.diagnosticLevel.toKmpSentryLevel()!! + override val environment: String? get() = androidOptions.environment diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt index aac8aeff..d7c488a0 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt @@ -32,6 +32,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions) cocoaOptions.enableAppHangTracking = kmpOptions.enableAppHangTracking cocoaOptions.enableWatchdogTerminationTracking = kmpOptions.enableWatchdogTerminationTracking cocoaOptions.appHangTimeoutInterval = kmpOptions.appHangTimeoutIntervalMillis.toDouble() + cocoaOptions.diagnosticLevel = kmpOptions.diagnosticLevel.toCocoaSentryLevel() kmpOptions.sampleRate?.let { cocoaOptions.sampleRate = NSNumber(double = it) } diff --git a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt index 8ed826c6..5c9891d7 100644 --- a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt @@ -1,6 +1,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.kotlin.multiplatform.extensions.toCocoaOptionsConfiguration +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn import kotlinx.cinterop.convert import kotlin.test.assertEquals @@ -50,6 +51,9 @@ open class SentryAppleOptionsWrapper(private val cocoaOptions: CocoaSentryOption override val enableWatchdogTerminationTracking: Boolean get() = cocoaOptions.enableWatchdogTerminationTracking + override val diagnosticLevel: SentryLevel + get() = cocoaOptions.diagnosticLevel.toKmpSentryLevel()!! + override fun applyFromOptions(options: SentryOptions) { options.toCocoaOptionsConfiguration().invoke(cocoaOptions) } diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt index cb559b85..2f42adac 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt @@ -16,32 +16,34 @@ internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> U * Applies the given base SentryOptions to this JvmSentryOption * This avoids code duplication during init on Android */ -internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { - dsn = options.dsn - isAttachThreads = options.attachThreads - isAttachStacktrace = options.attachStackTrace - dist = options.dist - environment = options.environment - release = options.release - isDebug = options.debug - sessionTrackingIntervalMillis = options.sessionTrackingIntervalMillis - isEnableAutoSessionTracking = options.enableAutoSessionTracking - maxAttachmentSize = options.maxAttachmentSize - maxBreadcrumbs = options.maxBreadcrumbs - sampleRate = options.sampleRate - tracesSampleRate = options.tracesSampleRate - setBeforeBreadcrumb { jvmBreadcrumb, _ -> - if (options.beforeBreadcrumb == null) { +internal fun JvmSentryOptions.applyJvmBaseOptions(kmpOptions: SentryOptions) { + val jvmOptions = this + jvmOptions.dsn = kmpOptions.dsn + jvmOptions.isAttachThreads = kmpOptions.attachThreads + jvmOptions.isAttachStacktrace = kmpOptions.attachStackTrace + jvmOptions.dist = kmpOptions.dist + jvmOptions.environment = kmpOptions.environment + jvmOptions.release = kmpOptions.release + jvmOptions.isDebug = kmpOptions.debug + jvmOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis + jvmOptions.isEnableAutoSessionTracking = kmpOptions.enableAutoSessionTracking + jvmOptions.maxAttachmentSize = kmpOptions.maxAttachmentSize + jvmOptions.maxBreadcrumbs = kmpOptions.maxBreadcrumbs + jvmOptions.sampleRate = kmpOptions.sampleRate + jvmOptions.tracesSampleRate = kmpOptions.tracesSampleRate + jvmOptions.setDiagnosticLevel(kmpOptions.diagnosticLevel.toJvmSentryLevel()) + jvmOptions.setBeforeBreadcrumb { jvmBreadcrumb, _ -> + if (kmpOptions.beforeBreadcrumb == null) { jvmBreadcrumb } else { - options.beforeBreadcrumb?.invoke(jvmBreadcrumb.toKmpBreadcrumb())?.toJvmBreadcrumb() + kmpOptions.beforeBreadcrumb?.invoke(jvmBreadcrumb.toKmpBreadcrumb())?.toJvmBreadcrumb() } } - setBeforeSend { jvmSentryEvent, hint -> - if (options.beforeSend == null) { + jvmOptions.setBeforeSend { jvmSentryEvent, hint -> + if (kmpOptions.beforeSend == null) { jvmSentryEvent } else { - options.beforeSend?.invoke(SentryEvent(jvmSentryEvent))?.let { + kmpOptions.beforeSend?.invoke(SentryEvent(jvmSentryEvent))?.let { jvmSentryEvent.applyKmpEvent(it) } } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 2d8df290..a76ecb7b 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -70,6 +70,9 @@ public open class SentryOptions { /** Information about the Sentry SDK that generated this event. */ public var sdk: SdkVersion? = null + /** Sets the minimum log level. Default is [SentryLevel.DEBUG] */ + public var diagnosticLevel: SentryLevel = SentryLevel.DEBUG + /** This variable controls the total amount of breadcrumbs that should be captured. Default is 100. */ public var maxBreadcrumbs: Int = DEFAULT_MAX_BREADCRUMBS diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt index 9bf680cb..b89952f9 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt @@ -6,6 +6,7 @@ interface CommonPlatformOptions { val release: String? val debug: Boolean val environment: String? + val diagnosticLevel: SentryLevel val dist: String? val enableAutoSessionTracking: Boolean val sessionTrackingIntervalMillis: Long diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt index 044d97e1..73bb53ae 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt @@ -114,6 +114,7 @@ class SentryOptionsTest : BaseSentryTest() { assertNull(options.beforeBreadcrumb) assertNull(options.beforeSend) assertNull(options.sdk) + assertEquals(SentryLevel.DEBUG, options.diagnosticLevel) assertEquals(DEFAULT_MAX_BREADCRUMBS, options.maxBreadcrumbs) assertEquals(DEFAULT_MAX_ATTACHMENT_SIZE, options.maxAttachmentSize) assertFalse(options.attachViewHierarchy) @@ -145,6 +146,7 @@ class SentryOptionsTest : BaseSentryTest() { dist = "dist" enableAutoSessionTracking = false sessionTrackingIntervalMillis = 1000L + diagnosticLevel = SentryLevel.ERROR maxBreadcrumbs = 10 maxAttachmentSize = 100L sampleRate = 0.5 @@ -178,6 +180,7 @@ class SentryOptionsTest : BaseSentryTest() { assertEquals(100L, platformOptions.maxAttachmentSize) assertEquals(0.5, platformOptions.sampleRate) assertEquals(0.5, platformOptions.tracesSampleRate) + assertEquals(SentryLevel.ERROR, platformOptions.diagnosticLevel) platformOptions.assertPlatformSpecificOptions(options) } diff --git a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt index 965b3fa5..7a3afecf 100644 --- a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt @@ -1,6 +1,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.kotlin.multiplatform.extensions.toJvmSentryOptionsCallback +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn actual interface PlatformOptions : CommonPlatformOptions @@ -42,6 +43,9 @@ class SentryJvmOptionsWrapper(private val jvmOptions: JvmSentryOptions) : Platfo override val tracesSampleRate: Double? get() = jvmOptions.tracesSampleRate + override val diagnosticLevel: SentryLevel + get() = jvmOptions.diagnosticLevel.toKmpSentryLevel()!! + override fun applyFromOptions(options: SentryOptions) { options.toJvmSentryOptionsCallback().invoke(jvmOptions) }