From 50ee045a34aacf26f3b6bd4a6de16d4ece6df8bb Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 8 Jul 2025 08:33:44 -0300 Subject: [PATCH 1/3] feat: add OSLogSupabaseLogger --- .../Helpers/Logger/OSLogSupabaseLogger.swift | 53 +++++++++++++++++++ .../Helpers/{ => Logger}/SupabaseLogger.swift | 1 + 2 files changed, 54 insertions(+) create mode 100644 Sources/Helpers/Logger/OSLogSupabaseLogger.swift rename Sources/Helpers/{ => Logger}/SupabaseLogger.swift (99%) diff --git a/Sources/Helpers/Logger/OSLogSupabaseLogger.swift b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift new file mode 100644 index 00000000..5aa0f21b --- /dev/null +++ b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift @@ -0,0 +1,53 @@ +import Foundation + +#if canImport(OSLog) + import OSLog +#endif + +/// A SupabaseLogger implementation that logs to OSLog. +/// +/// This logger maps Supabase log levels to appropriate OSLog levels: +/// - `.verbose` → `.info` +/// - `.debug` → `.debug` +/// - `.warning` → `.notice` +/// - `.error` → `.error` +/// +/// ## Usage +/// +/// ```swift +/// let logger = Logger(subsystem: "com.yourapp.supabase", category: "auth") +/// let supabaseLogger = OSLogSupabaseLogger(logger) +/// +/// // Use with Supabase client +/// let supabase = SupabaseClient( +/// supabaseURL: url, +/// supabaseKey: key, +/// options: .init(global: .init(logger: supabaseLogger)) +/// ) +/// ``` +@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) +public struct OSLogSupabaseLogger: SupabaseLogger { + private let logger: Logger + + /// Creates a new OSLog-based logger with a provided Logger instance. + /// + /// - Parameter logger: The OSLog Logger instance to use for logging + public init(_ logger: Logger) { + self.logger = logger + } + + public func log(message: SupabaseLogMessage) { + let logMessage = message.description + + switch message.level { + case .verbose: + logger.info("\(logMessage, privacy: .public)") + case .debug: + logger.debug("\(logMessage, privacy: .public)") + case .warning: + logger.notice("\(logMessage, privacy: .public)") + case .error: + logger.error("\(logMessage, privacy: .public)") + } + } +} \ No newline at end of file diff --git a/Sources/Helpers/SupabaseLogger.swift b/Sources/Helpers/Logger/SupabaseLogger.swift similarity index 99% rename from Sources/Helpers/SupabaseLogger.swift rename to Sources/Helpers/Logger/SupabaseLogger.swift index 313b5a92..d5732c01 100644 --- a/Sources/Helpers/SupabaseLogger.swift +++ b/Sources/Helpers/Logger/SupabaseLogger.swift @@ -214,3 +214,4 @@ extension SupabaseLogger { } } #endif + From 66e36581a79e85ff2f257e1002c09ceb623bed9a Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 29 Jul 2025 16:42:54 -0300 Subject: [PATCH 2/3] add default Logger --- .../Helpers/Logger/OSLogSupabaseLogger.swift | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Sources/Helpers/Logger/OSLogSupabaseLogger.swift b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift index 5aa0f21b..bcde1c87 100644 --- a/Sources/Helpers/Logger/OSLogSupabaseLogger.swift +++ b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift @@ -15,8 +15,7 @@ import Foundation /// ## Usage /// /// ```swift -/// let logger = Logger(subsystem: "com.yourapp.supabase", category: "auth") -/// let supabaseLogger = OSLogSupabaseLogger(logger) +/// let supabaseLogger = OSLogSupabaseLogger() /// /// // Use with Supabase client /// let supabase = SupabaseClient( @@ -28,17 +27,19 @@ import Foundation @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) public struct OSLogSupabaseLogger: SupabaseLogger { private let logger: Logger - + /// Creates a new OSLog-based logger with a provided Logger instance. /// - /// - Parameter logger: The OSLog Logger instance to use for logging - public init(_ logger: Logger) { + /// - Parameter logger: The OSLog Logger instance to use for logging. + public init( + _ logger: Logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "", category: "Supabase") + ) { self.logger = logger } - + public func log(message: SupabaseLogMessage) { let logMessage = message.description - + switch message.level { case .verbose: logger.info("\(logMessage, privacy: .public)") @@ -50,4 +51,4 @@ public struct OSLogSupabaseLogger: SupabaseLogger { logger.error("\(logMessage, privacy: .public)") } } -} \ No newline at end of file +} From dd03aadb62d5bfbfbe9d4e3fef566a2be68aab01 Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 29 Jul 2025 18:18:36 -0300 Subject: [PATCH 3/3] move definition inside if --- .../Helpers/Logger/OSLogSupabaseLogger.swift | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/Sources/Helpers/Logger/OSLogSupabaseLogger.swift b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift index bcde1c87..8b9233cf 100644 --- a/Sources/Helpers/Logger/OSLogSupabaseLogger.swift +++ b/Sources/Helpers/Logger/OSLogSupabaseLogger.swift @@ -2,53 +2,53 @@ import Foundation #if canImport(OSLog) import OSLog -#endif - -/// A SupabaseLogger implementation that logs to OSLog. -/// -/// This logger maps Supabase log levels to appropriate OSLog levels: -/// - `.verbose` → `.info` -/// - `.debug` → `.debug` -/// - `.warning` → `.notice` -/// - `.error` → `.error` -/// -/// ## Usage -/// -/// ```swift -/// let supabaseLogger = OSLogSupabaseLogger() -/// -/// // Use with Supabase client -/// let supabase = SupabaseClient( -/// supabaseURL: url, -/// supabaseKey: key, -/// options: .init(global: .init(logger: supabaseLogger)) -/// ) -/// ``` -@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) -public struct OSLogSupabaseLogger: SupabaseLogger { - private let logger: Logger - /// Creates a new OSLog-based logger with a provided Logger instance. + /// A SupabaseLogger implementation that logs to OSLog. /// - /// - Parameter logger: The OSLog Logger instance to use for logging. - public init( - _ logger: Logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "", category: "Supabase") - ) { - self.logger = logger - } + /// This logger maps Supabase log levels to appropriate OSLog levels: + /// - `.verbose` → `.info` + /// - `.debug` → `.debug` + /// - `.warning` → `.notice` + /// - `.error` → `.error` + /// + /// ## Usage + /// + /// ```swift + /// let supabaseLogger = OSLogSupabaseLogger() + /// + /// // Use with Supabase client + /// let supabase = SupabaseClient( + /// supabaseURL: url, + /// supabaseKey: key, + /// options: .init(global: .init(logger: supabaseLogger)) + /// ) + /// ``` + @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) + public struct OSLogSupabaseLogger: SupabaseLogger { + private let logger: Logger + + /// Creates a new OSLog-based logger with a provided Logger instance. + /// + /// - Parameter logger: The OSLog Logger instance to use for logging. + public init( + _ logger: Logger = Logger(subsystem: Bundle.main.bundleIdentifier ?? "", category: "Supabase") + ) { + self.logger = logger + } - public func log(message: SupabaseLogMessage) { - let logMessage = message.description + public func log(message: SupabaseLogMessage) { + let logMessage = message.description - switch message.level { - case .verbose: - logger.info("\(logMessage, privacy: .public)") - case .debug: - logger.debug("\(logMessage, privacy: .public)") - case .warning: - logger.notice("\(logMessage, privacy: .public)") - case .error: - logger.error("\(logMessage, privacy: .public)") + switch message.level { + case .verbose: + logger.info("\(logMessage, privacy: .public)") + case .debug: + logger.debug("\(logMessage, privacy: .public)") + case .warning: + logger.notice("\(logMessage, privacy: .public)") + case .error: + logger.error("\(logMessage, privacy: .public)") + } } } -} +#endif