40 lines
1 KiB
Swift
40 lines
1 KiB
Swift
|
|
import Foundation
|
||
|
|
import OSLog
|
||
|
|
|
||
|
|
public struct SaplingLogger: Sendable {
|
||
|
|
public enum Category: String, Sendable {
|
||
|
|
case app
|
||
|
|
case workspace
|
||
|
|
case git
|
||
|
|
case editor
|
||
|
|
case storage
|
||
|
|
case rendering
|
||
|
|
}
|
||
|
|
|
||
|
|
private let subsystem: String
|
||
|
|
|
||
|
|
public init(subsystem: String = "app.sapling.Sapling") {
|
||
|
|
self.subsystem = subsystem
|
||
|
|
}
|
||
|
|
|
||
|
|
public func debug(_ message: String, category: Category) {
|
||
|
|
logger(for: category).debug("\(message, privacy: .public)")
|
||
|
|
}
|
||
|
|
|
||
|
|
public func info(_ message: String, category: Category) {
|
||
|
|
logger(for: category).info("\(message, privacy: .public)")
|
||
|
|
}
|
||
|
|
|
||
|
|
public func warning(_ message: String, category: Category) {
|
||
|
|
logger(for: category).warning("\(message, privacy: .public)")
|
||
|
|
}
|
||
|
|
|
||
|
|
public func error(_ message: String, category: Category) {
|
||
|
|
logger(for: category).error("\(message, privacy: .public)")
|
||
|
|
}
|
||
|
|
|
||
|
|
private func logger(for category: Category) -> Logger {
|
||
|
|
Logger(subsystem: subsystem, category: category.rawValue)
|
||
|
|
}
|
||
|
|
}
|