From 1ff7318915c61cd5536d0f299ff820e5b93d8971 Mon Sep 17 00:00:00 2001 From: Kieran Osgood Date: Wed, 13 May 2026 11:28:22 +0100 Subject: [PATCH] Make logger shared state concurrency-safe --- .../ShopifyAcceleratedCheckouts.swift | 11 ++++++---- .../Sources/ShopifyCheckoutKit/Logger.swift | 22 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/platforms/swift/Sources/ShopifyAcceleratedCheckouts/ShopifyAcceleratedCheckouts.swift b/platforms/swift/Sources/ShopifyAcceleratedCheckouts/ShopifyAcceleratedCheckouts.swift index 206cb56f..ce154d2e 100644 --- a/platforms/swift/Sources/ShopifyAcceleratedCheckouts/ShopifyAcceleratedCheckouts.swift +++ b/platforms/swift/Sources/ShopifyAcceleratedCheckouts/ShopifyAcceleratedCheckouts.swift @@ -31,13 +31,16 @@ public enum ShopifyAcceleratedCheckouts { /// The logging level for Accelerated Checkouts operations /// Default: .error - which will emit "error" and "fault" logs - public static var logLevel: LogLevel = .error { - didSet { - logger.logLevel = logLevel + public static var logLevel: LogLevel { + get { + logger.logLevel + } + set { + logger.logLevel = newValue } } /// Shared logger for ShopifyAcceleratedCheckouts /// To modify the logLevel - internal static var logger = OSLogger(prefix: name, logLevel: logLevel) + internal static let logger = OSLogger(prefix: name, logLevel: .error) } diff --git a/platforms/swift/Sources/ShopifyCheckoutKit/Logger.swift b/platforms/swift/Sources/ShopifyCheckoutKit/Logger.swift index 21e69edb..ebb1e661 100644 --- a/platforms/swift/Sources/ShopifyCheckoutKit/Logger.swift +++ b/platforms/swift/Sources/ShopifyCheckoutKit/Logger.swift @@ -33,21 +33,31 @@ public enum LogLevel: String, CaseIterable { case none } -public class OSLogger { +public class OSLogger: @unchecked Sendable { private let logger = OSLog(subsystem: subsystem, category: OSLog.Category.pointsOfInterest) - private var prefix: String - package var logLevel: LogLevel + private let prefix: String + private let lock = NSLock() + private var _logLevel: LogLevel - public static var shared = OSLogger() + package var logLevel: LogLevel { + get { + lock.withLock { _logLevel } + } + set { + lock.withLock { _logLevel = newValue } + } + } + + public static let shared = OSLogger() public init() { prefix = "ShopifyCheckoutKit" - logLevel = ShopifyCheckoutKit.configuration.logLevel + _logLevel = .error } public init(prefix: String, logLevel: LogLevel) { self.prefix = prefix - self.logLevel = logLevel + _logLevel = logLevel } public func debug(_ message: String) {