From fb6c8790f312ebe54a7c063e64745471b84546d0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 14 Jul 2026 18:03:48 -0700 Subject: [PATCH] fix: keep logger overloads nonisolated --- CHANGELOG.md | 3 +++ Package.swift | 1 + Sources/AXorcist/Logging/GlobalAXLogger.swift | 8 ++++---- .../AXorcistTests/LoggerIsolationTests.swift | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 Tests/AXorcistTests/LoggerIsolationTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b4b5c8..4ab4a6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to AXorcist will be documented in this file. ## [Unreleased] +### Fixed +- Keep the public swift-log convenience overloads nonisolated so importing AXorcist does not impose main-actor isolation on downstream log calls. + ## [0.1.3] - 2026-07-14 ### Fixed diff --git a/Package.swift b/Package.swift index eac40d0..77dd127 100644 --- a/Package.swift +++ b/Package.swift @@ -58,6 +58,7 @@ let package = Package( name: "AXorcistTests", dependencies: [ "AXorcist", // Dependency restored to AXorcist + .product(name: "Logging", package: "swift-log"), ], path: "Tests/AXorcistTests", // Explicit path swiftSettings: approachableConcurrencySettings diff --git a/Sources/AXorcist/Logging/GlobalAXLogger.swift b/Sources/AXorcist/Logging/GlobalAXLogger.swift index 0613f64..f4afae3 100644 --- a/Sources/AXorcist/Logging/GlobalAXLogger.swift +++ b/Sources/AXorcist/Logging/GlobalAXLogger.swift @@ -171,22 +171,22 @@ public class GlobalAXLogger { extension Logging.Logger { @inlinable - public func debug(_ message: @autoclosure () -> String) { + public nonisolated func debug(_ message: @autoclosure () -> String) { self.log(level: .debug, "\(message())") } @inlinable - public func info(_ message: @autoclosure () -> String) { + public nonisolated func info(_ message: @autoclosure () -> String) { self.log(level: .info, "\(message())") } @inlinable - public func warning(_ message: @autoclosure () -> String) { + public nonisolated func warning(_ message: @autoclosure () -> String) { self.log(level: .warning, "\(message())") } @inlinable - public func error(_ message: @autoclosure () -> String) { + public nonisolated func error(_ message: @autoclosure () -> String) { self.log(level: .error, "\(message())") } } diff --git a/Tests/AXorcistTests/LoggerIsolationTests.swift b/Tests/AXorcistTests/LoggerIsolationTests.swift new file mode 100644 index 0000000..2d0019b --- /dev/null +++ b/Tests/AXorcistTests/LoggerIsolationTests.swift @@ -0,0 +1,19 @@ +import Logging +import Testing +@testable import AXorcist + +@Suite("Logger isolation") +struct LoggerIsolationTests { + @Test("convenience overloads are callable outside the main actor") + func convenienceOverloadsAreNonisolated() { + let logger = Logger(label: "AXorcistTests.LoggerIsolation") + Self.logAllLevels(logger) + } + + nonisolated private static func logAllLevels(_ logger: Logger) { + logger.debug("debug") + logger.info("info") + logger.warning("warning") + logger.error("error") + } +}