2026-05-28 16:32:34 +08:00

71 lines
1.7 KiB
Swift

//
// SDLLogger.swift
// Tun
//
// Created by on 2024/3/13.
//
import Foundation
import os
public final class SDLLogger: @unchecked Sendable {
public enum Category: String, CaseIterable {
case app
case context
case dns
case network
case packet
case policy
case session
case `super`
case udpHole
}
private static let subsystem = "com.jihe.punchnet.tun"
private static let loggers: [Category: SDLLogger] = {
Dictionary(uniqueKeysWithValues: Category.allCases.map { ($0, SDLLogger(category: $0)) })
}()
private let logger: Logger
private init(category: Category) {
self.logger = Logger(subsystem: Self.subsystem, category: category.rawValue)
}
private func log(_ message: String) {
self.logger.info("\(message, privacy: .public)")
}
private func trace(_ message: String) {
self.logger.debug("\(message, privacy: .public)")
}
private func fatal(_ message: String) {
self.logger.fault("\(message, privacy: .public)")
}
public static func log(_ message: @autoclosure () -> String, category: Category = .context) {
guard let logger = loggers[category] else {
return
}
logger.log(message())
}
public static func trace(_ message: @autoclosure () -> String, category: Category) {
guard let logger = loggers[category] else {
return
}
logger.trace(message())
}
public static func fatal(_ message: @autoclosure () -> String, category: Category = .context) {
guard let logger = loggers[category] else {
return
}
logger.fatal(message())
}
}