Skip to content

Commit 23beb9a

Browse files
cleanup print logger
1 parent 608cb46 commit 23beb9a

File tree

1 file changed

+41
-26
lines changed

1 file changed

+41
-26
lines changed

Sources/PowerSync/Logger.swift

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,60 @@ import OSLog
22

33
/// A log writer which prints to the standard output
44
///
5-
/// This writer uses `os.Logger` on iOS 14+ and falls back to `print` for earlier versions.
5+
/// This writer uses `os.Logger` on iOS/macOS/tvOS/watchOS 14+ and falls back to `print` for earlier versions.
66
public class PrintLogWriter: LogWriterProtocol {
77

8+
private let subsystem: String
9+
private let category: String
10+
private lazy var logger: Any? = {
11+
if #available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) {
12+
return Logger(subsystem: subsystem, category: category)
13+
}
14+
return nil
15+
}()
16+
17+
/// Creates a new PrintLogWriter
18+
/// - Parameters:
19+
/// - subsystem: The subsystem identifier (typically reverse DNS notation of your app)
20+
/// - category: The category within your subsystem
21+
public init(subsystem: String = Bundle.main.bundleIdentifier ?? "com.powersync.logger",
22+
category: String = "default") {
23+
self.subsystem = subsystem
24+
self.category = category
25+
}
26+
827
/// Logs a message with a given severity and optional tag.
9-
///
10-
/// - Parameters:
11-
/// - severity: The severity level of the message.
12-
/// - message: The content of the log message.
13-
/// - tag: An optional tag used to categorize the message. If empty, no brackets are shown.
28+
/// - Parameters:
29+
/// - severity: The severity level of the message.
30+
/// - message: The content of the log message.
31+
/// - tag: An optional tag used to categorize the message. If empty, no brackets are shown.
1432
public func log(severity: LogSeverity, message: String, tag: String?) {
15-
let tagPrefix: String
16-
if let tag, !tag.isEmpty {
17-
tagPrefix = "[\(tag)] "
18-
} else {
19-
tagPrefix = ""
20-
}
33+
let tagPrefix = tag.map { !$0.isEmpty ? "[\($0)] " : "" } ?? ""
34+
let formattedMessage = "\(tagPrefix)\(message)"
2135

22-
let message = "\(tagPrefix) \(message)"
23-
if #available(iOS 14.0, *) {
24-
let l = Logger()
36+
if #available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) {
37+
guard let logger = logger as? Logger else { return }
2538

2639
switch severity {
27-
case .info:
28-
l.info("\(message)")
29-
case .error:
30-
l.error("\(message)")
31-
case .debug:
32-
l.debug("\(message)")
33-
case .warning:
34-
l.warning("\(message)")
35-
case .fault:
36-
l.fault("\(message)")
40+
case .info:
41+
logger.info("\(formattedMessage, privacy: .public)")
42+
case .error:
43+
logger.error("\(formattedMessage, privacy: .public)")
44+
case .debug:
45+
logger.debug("\(formattedMessage, privacy: .public)")
46+
case .warning:
47+
logger.warning("\(formattedMessage, privacy: .public)")
48+
case .fault:
49+
logger.fault("\(formattedMessage, privacy: .public)")
3750
}
3851
} else {
39-
print("\(severity.stringValue): \(message)")
52+
print("\(severity.stringValue): \(formattedMessage)")
4053
}
4154
}
4255
}
4356

57+
58+
4459
/// A default logger configuration that uses `PrintLogWritter` and filters messages by minimum severity.
4560
public class DefaultLogger: LoggerProtocol {
4661
public var minSeverity: LogSeverity

0 commit comments

Comments
 (0)