punchnet-macos/Tun/Diagnostics/SDLLogger.swift
2026-05-28 16:11:31 +08:00

69 lines
1.8 KiB
Swift

//
// SDLLogger.swift
// Tun
//
// Created by on 2024/3/13.
//
import Foundation
import os
public class SDLLogger: @unchecked Sendable {
public enum Subsystem: CaseIterable {
case debug
case trace
}
private static let debugLoggingEnabled = ProcessInfo.processInfo.environment["SDL_DEBUG_LOG"] != "0"
private static let traceLoggingEnabled = ProcessInfo.processInfo.environment["SDL_TRACE_LOG"] == "1"
private static let loggers: [Subsystem: SDLLogger] = {
Dictionary(uniqueKeysWithValues: Subsystem.allCases.map { ($0, SDLLogger(subsystem: $0)) })
}()
private let log: Logger
private init(subsystem: Subsystem) {
var label: String
switch subsystem {
case .debug:
label = "com.jihe.punchnet.debug"
case .trace:
label = "com.jihe.punchnet.trace"
}
self.log = Logger(subsystem: label, category: "punchnet")
}
public func _log(_ message: String) {
self.log.info("\(message, privacy: .public)")
}
public func _fatal(_ message: String) {
self.log.fault("\(message, privacy: .public)")
}
public static func log(_ message: @autoclosure () -> String, for system: Subsystem = .debug) {
guard self.isEnabled(system), let logger = loggers[system] else {
return
}
logger._log(message())
}
public static func fatal(_ message: @autoclosure () -> String, for system: Subsystem = .debug) {
guard let logger = loggers[system] else {
return
}
logger._fatal(message())
}
private static func isEnabled(_ system: Subsystem) -> Bool {
switch system {
case .debug:
return self.debugLoggingEnabled
case .trace:
return self.traceLoggingEnabled
}
}
}