From a979f2e9e0957decf77fa7a34702ab1720424477 Mon Sep 17 00:00:00 2001 From: oshai Date: Wed, 9 Aug 2023 01:35:14 +0300 Subject: [PATCH] add constant logger --- .../oshai/kotlinlogging/internal/KLoggerFactory.kt | 9 +++++++++ 1 file changed, 9 insertions(+) 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)) }