71 lines
1.7 KiB
Swift
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())
|
|
}
|
|
}
|