From e68c860eb369919312120f3a090aaad96f09c819 Mon Sep 17 00:00:00 2001 From: Sean Proctor Date: Mon, 2 Jun 2025 22:27:44 -0400 Subject: [PATCH 1/3] Improve min log level Update docs to indicate that log level passed to plugins is the min log level Don't allow changing the log level of the default logger after initialization Set Kermit minSeverity using logLevel --- .../io/github/jan/supabase/SupabaseClient.kt | 6 ++-- .../jan/supabase/logging/SupabaseLogger.kt | 33 +++++++------------ .../plugins/SupabasePluginProvider.kt | 7 ---- 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt index 4348480bc..3c2387c2e 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt @@ -73,19 +73,19 @@ interface SupabaseClient { companion object { /** - * The default logging level used for plugins. Can be changed within the [SupabaseClientBuilder] + * The default minimum logging level used for plugins. Can be changed within the [SupabaseClientBuilder] */ var DEFAULT_LOG_LEVEL = LogLevel.INFO internal set - val LOGGER = createLogger("Supabase-Core") + val LOGGER: SupabaseLogger = createLogger("Supabase-Core") /** * Creates a new [SupabaseLogger] using the [KermitSupabaseLogger] implementation. * @param tag The tag for the logger * @param level The logging level. If set to null, the [DEFAULT_LOG_LEVEL] property will be used instead */ - fun createLogger(tag: String, level: LogLevel? = null) = KermitSupabaseLogger(level, tag) + fun createLogger(tag: String, level: LogLevel? = null): SupabaseLogger = KermitSupabaseLogger(level, tag) } diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt index fc73b3702..38de3f1d9 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt @@ -3,7 +3,6 @@ package io.github.jan.supabase.logging import co.touchlab.kermit.Logger import co.touchlab.kermit.Severity import io.github.jan.supabase.SupabaseClient -import io.github.jan.supabase.annotations.SupabaseInternal /** * An interface for logging in Supabase plugins. @@ -11,7 +10,7 @@ import io.github.jan.supabase.annotations.SupabaseInternal abstract class SupabaseLogger { /** - * The log level for this logger. If null, the [SupabaseClient.DEFAULT_LOG_LEVEL] will be used. + * The minimum log level to handle for this logger. If null, the [SupabaseClient.DEFAULT_LOG_LEVEL] will be used. */ abstract val level: LogLevel? @@ -35,37 +34,29 @@ abstract class SupabaseLogger { } } - /** - * Set the log level for this logger - * @param level The log level - */ - @SupabaseInternal - abstract fun setLevel(level: LogLevel) - } /** * A logger implementation using the Kermit logger. - * @param level The log level for this logger. If null, the [SupabaseClient.DEFAULT_LOG_LEVEL] will be used. + * @param level The minimum log level for this logger. * @param tag The tag for this logger * @param logger The Kermit logger */ -class KermitSupabaseLogger(level: LogLevel?, tag: String, private val logger: Logger = Logger.withTag(tag)): - SupabaseLogger() { - - override var level: LogLevel? = level - private set - - @SupabaseInternal - override fun setLevel(level: LogLevel) { - this.level = level +class KermitSupabaseLogger( + override val level: LogLevel?, + tag: String, + private val logger: Logger = Logger.withTag(tag) +) : SupabaseLogger() { + + init { + logger.mutableConfig.minSeverity = (level ?: SupabaseClient.DEFAULT_LOG_LEVEL).toSeverity() } - override fun log(level: LogLevel, throwable: Throwable?, message: String) { + override fun log(level: LogLevel, throwable: Throwable?, message: String) { logger.log(level.toSeverity(), logger.tag, throwable, message) } - private fun LogLevel.toSeverity() = when(this) { + private fun LogLevel.toSeverity() = when (this) { LogLevel.DEBUG -> Severity.Debug LogLevel.INFO -> Severity.Info LogLevel.WARNING -> Severity.Warn diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/plugins/SupabasePluginProvider.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/plugins/SupabasePluginProvider.kt index 87437fee1..cf90bfc58 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/plugins/SupabasePluginProvider.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/plugins/SupabasePluginProvider.kt @@ -35,11 +35,4 @@ interface SupabasePluginProvider */ fun create(supabaseClient: SupabaseClient, config: Config) : PluginInstance - /** - * Updates the plugin's log level - */ - fun setLogLevel(level: LogLevel) { - logger.setLevel(level) - } - } From 791b8597dfef9154891f7851f7ebd14386b5d337 Mon Sep 17 00:00:00 2001 From: Sean Proctor Date: Mon, 2 Jun 2025 22:34:11 -0400 Subject: [PATCH 2/3] Cannot use DEFAULT_LOG_LEVEL in initializer --- .../kotlin/io/github/jan/supabase/SupabaseClient.kt | 3 ++- .../kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt index 3c2387c2e..061c6c156 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/SupabaseClient.kt @@ -85,7 +85,8 @@ interface SupabaseClient { * @param tag The tag for the logger * @param level The logging level. If set to null, the [DEFAULT_LOG_LEVEL] property will be used instead */ - fun createLogger(tag: String, level: LogLevel? = null): SupabaseLogger = KermitSupabaseLogger(level, tag) + fun createLogger(tag: String, level: LogLevel? = null): SupabaseLogger = + KermitSupabaseLogger(level ?: DEFAULT_LOG_LEVEL, tag) } diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt index 38de3f1d9..95b147f46 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt @@ -43,13 +43,13 @@ abstract class SupabaseLogger { * @param logger The Kermit logger */ class KermitSupabaseLogger( - override val level: LogLevel?, + override val level: LogLevel, tag: String, private val logger: Logger = Logger.withTag(tag) ) : SupabaseLogger() { init { - logger.mutableConfig.minSeverity = (level ?: SupabaseClient.DEFAULT_LOG_LEVEL).toSeverity() + logger.mutableConfig.minSeverity = level.toSeverity() } override fun log(level: LogLevel, throwable: Throwable?, message: String) { From 24c74d99b39a6a732f1800245765a6fbd8022641 Mon Sep 17 00:00:00 2001 From: Sean Proctor Date: Tue, 3 Jun 2025 09:24:16 -0400 Subject: [PATCH 3/3] make KermitSupabaseLogger internal --- .../kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt index 95b147f46..27f4cbbcf 100644 --- a/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt +++ b/Supabase/src/commonMain/kotlin/io/github/jan/supabase/logging/SupabaseLogger.kt @@ -42,7 +42,7 @@ abstract class SupabaseLogger { * @param tag The tag for this logger * @param logger The Kermit logger */ -class KermitSupabaseLogger( +internal class KermitSupabaseLogger( override val level: LogLevel, tag: String, private val logger: Logger = Logger.withTag(tag)