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") + } +}