11import PowerSyncKotlin
22
3- /// Maps a Kermit `Severity` level to a local `LogSeverity`.
4- ///
5- /// - Parameter severity: The Kermit log severity value from Kotlin.
6- /// - Returns: The corresponding `LogSeverity` used in Swift.
7- private func mapKermitSeverity( _ severity: PowerSyncKotlin . Kermit_coreSeverity ) -> LogSeverity {
8- switch severity {
9- case PowerSyncKotlin . Kermit_coreSeverity. verbose:
10- return LogSeverity . debug
11- case PowerSyncKotlin . Kermit_coreSeverity. debug:
12- return LogSeverity . debug
13- case PowerSyncKotlin . Kermit_coreSeverity. info:
14- return LogSeverity . info
15- case PowerSyncKotlin . Kermit_coreSeverity. warn:
16- return LogSeverity . warning
17- case PowerSyncKotlin . Kermit_coreSeverity. error:
18- return LogSeverity . error
19- case PowerSyncKotlin . Kermit_coreSeverity. assert:
20- return LogSeverity . fault
21- }
22- }
23-
24- /// Maps a local `LogSeverity` to a Kermit-compatible `Kermit_coreSeverity`.
25- ///
26- /// - Parameter severity: The Swift-side `LogSeverity`.
27- /// - Returns: The equivalent Kermit log severity.
28- private func mapSeverity( _ severity: LogSeverity ) -> PowerSyncKotlin . Kermit_coreSeverity {
29- switch severity {
30- case . debug:
31- return PowerSyncKotlin . Kermit_coreSeverity. debug
32- case . info:
33- return PowerSyncKotlin . Kermit_coreSeverity. info
34- case . warning:
35- return PowerSyncKotlin . Kermit_coreSeverity. warn
36- case . error:
37- return PowerSyncKotlin . Kermit_coreSeverity. error
38- case . fault:
39- return PowerSyncKotlin . Kermit_coreSeverity. assert
40- }
41- }
42-
43- /// Adapts a Swift `LogWritterProtocol` to Kermit's `LogWriter` interface.
3+ /// Adapts a Swift `LoggerProtocol` to Kermit's `LogWriter` interface.
444///
455/// This allows Kotlin logging (via Kermit) to call into the Swift logging implementation.
466private class KermitLogWriterAdapter : Kermit_coreLogWriter {
477 /// The underlying Swift log writer to forward log messages to.
48- var adapter : LogWriterProtocol
8+ let logger : any LoggerProtocol
499
5010 /// Initializes a new adapter.
5111 ///
5212 /// - Parameter adapter: A Swift log writer that will handle log output.
53- init ( adapter : LogWriterProtocol ) {
54- self . adapter = adapter
13+ init ( logger : any LoggerProtocol ) {
14+ self . logger = logger
5515 super. init ( )
5616 }
5717
@@ -63,27 +23,42 @@ private class KermitLogWriterAdapter: Kermit_coreLogWriter {
6323 /// - tag: An optional string categorizing the log.
6424 /// - throwable: An optional Kotlin exception (ignored here).
6525 override func log( severity: Kermit_coreSeverity , message: String , tag: String , throwable: KotlinThrowable ? ) {
66- adapter. log (
67- severity: mapKermitSeverity ( severity) ,
68- message: message,
69- tag: tag
70- )
26+ switch severity {
27+ case PowerSyncKotlin . Kermit_coreSeverity. verbose:
28+ return logger. debug ( message, tag: tag)
29+ case PowerSyncKotlin . Kermit_coreSeverity. debug:
30+ return logger. debug ( message, tag: tag)
31+ case PowerSyncKotlin . Kermit_coreSeverity. info:
32+ return logger. info ( message, tag: tag)
33+ case PowerSyncKotlin . Kermit_coreSeverity. warn:
34+ return logger. warning ( message, tag: tag)
35+ case PowerSyncKotlin . Kermit_coreSeverity. error:
36+ return logger. error ( message, tag: tag)
37+ case PowerSyncKotlin . Kermit_coreSeverity. assert:
38+ return logger. fault ( message, tag: tag)
39+ }
7140 }
7241}
7342
7443/// A logger implementation that integrates with PowerSync's Kotlin backend using Kermit.
7544///
7645/// This class bridges Swift log writers with the Kotlin logging system and supports
7746/// runtime configuration of severity levels and writer lists.
78- public class DatabaseLogger : LoggerProtocol {
47+ internal class DatabaseLogger : LoggerProtocol {
7948 /// The underlying Kermit logger instance provided by the PowerSyncKotlin SDK.
80- internal let kLogger = PowerSyncKotlin . generateLogger ( logger: nil )
49+ public let kLogger = PowerSyncKotlin . generateLogger ( logger: nil )
50+ public let logger : any LoggerProtocol
8151
8252 /// Initializes a new logger with an optional list of writers.
8353 ///
8454 /// - Parameter writers: An array of Swift log writers. Defaults to an empty array.
85- init ( writers: [ any LogWriterProtocol ] = [ ] ) {
86- setWriters ( writers)
55+ init ( _ logger: any LoggerProtocol ) {
56+ self . logger = logger
57+ // Set to the lowest severity. The adapter downstream logger should filter by severity
58+ kLogger. mutableConfig. setMinSeverity ( Kermit_coreSeverity . verbose)
59+ kLogger. mutableConfig. setLogWriterList (
60+ [ KermitLogWriterAdapter ( logger: logger) ]
61+ )
8762 }
8863
8964 /// Sets the minimum severity level that will be logged.
@@ -92,9 +67,7 @@ public class DatabaseLogger: LoggerProtocol {
9267 ///
9368 /// - Parameter severity: The minimum `LogSeverity` to allow through.
9469 public func setMinSeverity( _ severity: LogSeverity ) {
95- kLogger. mutableConfig. setMinSeverity (
96- mapSeverity ( severity)
97- )
70+ logger. setMinSeverity ( severity)
9871 }
9972
10073 /// Sets the list of log writers that will receive log messages.
@@ -103,33 +76,31 @@ public class DatabaseLogger: LoggerProtocol {
10376 ///
10477 /// - Parameter writers: An array of Swift `LogWritterProtocol` implementations.
10578 public func setWriters( _ writers: [ any LogWriterProtocol ] ) {
106- kLogger. mutableConfig. setLogWriterList (
107- writers. map { item in KermitLogWriterAdapter ( adapter: item) }
108- )
79+ logger. setWriters ( writers)
10980 }
11081
11182 /// Logs a debug-level message.
11283 public func debug( _ message: String , tag: String ) {
113- kLogger . d ( messageString : message, throwable : nil , tag: tag)
84+ logger . debug ( message, tag: tag)
11485 }
11586
11687 /// Logs an info-level message.
11788 public func info( _ message: String , tag: String ) {
118- kLogger . i ( messageString : message, throwable : nil , tag: tag)
89+ logger . info ( message, tag: tag)
11990 }
12091
12192 /// Logs a warning-level message.
12293 public func warning( _ message: String , tag: String ) {
123- kLogger . w ( messageString : message, throwable : nil , tag: tag)
94+ logger . warning ( message, tag: tag)
12495 }
12596
12697 /// Logs an error-level message.
12798 public func error( _ message: String , tag: String ) {
128- kLogger . e ( messageString : message, throwable : nil , tag: tag)
99+ logger . error ( message, tag: tag)
129100 }
130101
131102 /// Logs a fault (assert-level) message, typically used for critical issues.
132103 public func fault( _ message: String , tag: String ) {
133- kLogger . a ( messageString : message, throwable : nil , tag: tag)
104+ logger . fault ( message, tag: tag)
134105 }
135106}
0 commit comments