diff --git a/Tun/Diagnostics/SDLLogger.swift b/Tun/Diagnostics/SDLLogger.swift index c003261..1060228 100644 --- a/Tun/Diagnostics/SDLLogger.swift +++ b/Tun/Diagnostics/SDLLogger.swift @@ -14,13 +14,11 @@ public class SDLLogger: @unchecked Sendable { case trace = "com.jihe.punchnet.trace" } - private static var loggers: [String: SDLLogger] { - var loggers: [String: SDLLogger] = [:] - for sub in Subsystem.allCases { - loggers[sub.rawValue] = .init(subsystem: sub) - } - return loggers - } + 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 @@ -32,9 +30,20 @@ public class SDLLogger: @unchecked Sendable { self.log.info("\(message, privacy: .public)") } - public static func log(_ message: String, for system: Subsystem = .debug) { - if let logger = loggers[system.rawValue] { - logger._log(message) + public static func log(_ message: @autoclosure () -> String, for system: Subsystem = .debug) { + guard self.isEnabled(system), let logger = loggers[system] else { + return + } + + logger._log(message()) + } + + private static func isEnabled(_ system: Subsystem) -> Bool { + switch system { + case .debug: + return self.debugLoggingEnabled + case .trace: + return self.traceLoggingEnabled } } }