diff --git a/src/darwinMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerFactory.kt b/src/darwinMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerFactory.kt index 745547ae..4bfa73fc 100644 --- a/src/darwinMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerFactory.kt +++ b/src/darwinMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerFactory.kt @@ -3,17 +3,26 @@ package io.github.oshai.kotlinlogging.internal import io.github.oshai.kotlinlogging.DarwinKLogger import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLoggingConfiguration +import kotlin.native.concurrent.AtomicReference import platform.darwin.OS_LOG_DEFAULT import platform.darwin.os_log_create /** factory methods to obtain a [KLogger] */ internal actual object KLoggerFactory { + private val constantLogger: AtomicReference = AtomicReference(null) + /** get logger by explicit name */ internal actual fun logger(name: String): KLogger { val subsystemConfigured = KotlinLoggingConfiguration.subsystem.value val categoryConfigured = KotlinLoggingConfiguration.category.value return when { + subsystemConfigured != null && categoryConfigured != null -> { + constantLogger.value + ?: DarwinKLogger(name, os_log_create(subsystemConfigured, categoryConfigured)).also { + constantLogger.value = it + } + } subsystemConfigured != null || categoryConfigured != null -> { DarwinKLogger(name, os_log_create(subsystemConfigured ?: name, categoryConfigured ?: name)) }