diff --git a/Tun/PacketTunnelProvider.swift b/Tun/PacketTunnelProvider.swift index 216539b..9b2fccd 100644 --- a/Tun/PacketTunnelProvider.swift +++ b/Tun/PacketTunnelProvider.swift @@ -20,7 +20,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { let shared = UserDefaults(suiteName: "group.com.jihe.punchnetmac") let msg = shared?.string(forKey: "test_msg") - SDLLogger.shared.log("NE read message: \(msg ?? "failed")") + SDLLogger.log("NE read message: \(msg ?? "failed")", for: .debug) DarwinNotificationCenter.shared.post(.vpnStatusChanged) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index 7cc94af..2f236d8 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -112,25 +112,25 @@ actor SDLContextActor { await self.startDnsLocalClient() await self.supervisor.addWorker(name: "quicClient") { - SDLLogger.shared.log("[SDLContext] try start quicClient") + SDLLogger.log("[SDLContext] try start quicClient", for: .debug) let quicClient = try await self.startQUICClient() - SDLLogger.shared.log("[SDLContext] quicClient running!!!!") + SDLLogger.log("[SDLContext] quicClient running!!!!") await quicClient.waitClose() - SDLLogger.shared.log("[SDLContext] quicClient closed!!!!") + SDLLogger.log("[SDLContext] quicClient closed!!!!") } await self.supervisor.addWorker(name: "noticeClient") { let noticeClient = try self.startNoticeClient() - SDLLogger.shared.log("[SDLContext] noticeClient running!!!!") + SDLLogger.log("[SDLContext] noticeClient running!!!!") try await noticeClient.waitClose() - SDLLogger.shared.log("[SDLContext] noticeClient closed!!!!") + SDLLogger.log("[SDLContext] noticeClient closed!!!!") } await self.supervisor.addWorker(name: "udpHole") { let udpHole = try await self.startUDPHole() - SDLLogger.shared.log("[SDLContext] udp running!!!!") + SDLLogger.log("[SDLContext] udp running!!!!") try await udpHole.waitClose() - SDLLogger.shared.log("[SDLContext] udp closed!!!!") + SDLLogger.log("[SDLContext] udp closed!!!!") } } @@ -156,13 +156,13 @@ actor SDLContextActor { try await quicClient.waitReady() // 这里必须等待quic的协商完成 try await Task.sleep(for: .seconds(0.2)) - SDLLogger.shared.log("[SDLContext] start quic client: \(self.config.serverHost)") + SDLLogger.log("[SDLContext] start quic client: \(self.config.serverHost)") self.quicWorker = Task.detached { for await message in quicClient.messageStream { switch message { case .welcome(let welcome): - SDLLogger.shared.log("[SDLContext] quic welcome: \(welcome)") + SDLLogger.log("[SDLContext] quic welcome: \(welcome)") // 注册 await self.startRegisterLoop() case .pong: @@ -196,7 +196,7 @@ actor SDLContextActor { let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort) noticeClient.start() - SDLLogger.shared.log("[SDLContext] noticeClient started") + SDLLogger.log("[SDLContext] noticeClient started") self.noticeClient = noticeClient return noticeClient @@ -209,7 +209,7 @@ actor SDLContextActor { // 启动monitor let monitor = SDLNetworkMonitor() monitor.start() - SDLLogger.shared.log("[SDLContext] monitor started") + SDLLogger.log("[SDLContext] monitor started") self.monitor = monitor self.monitorWorker = Task.detached { @@ -218,9 +218,9 @@ actor SDLContextActor { case .changed: // 需要重新探测网络的nat类型 await self.probeNatType() - SDLLogger.shared.log("didNetworkPathChanged, nat type is:", level: .info) + SDLLogger.log("didNetworkPathChanged, nat type is:") case .unreachable: - SDLLogger.shared.log("didNetworkPathUnreachable", level: .warning) + SDLLogger.log("didNetworkPathUnreachable") } } } @@ -231,9 +231,9 @@ actor SDLContextActor { self.dnsWorker = nil // 启动dns服务 - let dnsClient = DNSCloudClient(host: self.config.serverIp, port: 15353, logger: SDLLogger.shared) + let dnsClient = DNSCloudClient(host: self.config.serverIp, port: 15353) dnsClient.start() - SDLLogger.shared.log("[SDLContext] dnsClient started") + SDLLogger.log("[SDLContext] dnsClient started") self.dnsClient = dnsClient self.dnsWorker = Task.detached { // 处理事件流 @@ -254,7 +254,7 @@ actor SDLContextActor { // 启动dns服务 let dnsLocalClient = DNSLocalClient() dnsLocalClient.start() - SDLLogger.shared.log("[SDLContext] dnsClient started") + SDLLogger.log("[SDLContext] dnsClient started") self.dnsLocalClient = dnsLocalClient self.dnsLocalWorker = Task.detached { // 处理事件流 @@ -277,7 +277,7 @@ actor SDLContextActor { // 启动udp服务器 let udpHole = try SDLUDPHole() try udpHole.start() - SDLLogger.shared.log("[SDLContext] udpHole started") + SDLLogger.log("[SDLContext] udpHole started") // 获取当前udp启动的地址 let localAddress = udpHole.getLocalAddress() @@ -297,7 +297,7 @@ actor SDLContextActor { await self.sendStunRequest() } - SDLLogger.shared.log("[SDLContext] udp pingTask cancel") + SDLLogger.log("[SDLContext] udp pingTask cancel") } // 处理消息流 @@ -318,14 +318,14 @@ actor SDLContextActor { do { try await self.handleHoleData(data: data) } catch let err { - SDLLogger.shared.log("[SDLContext] handleHoleData get err: \(err)") + SDLLogger.log("[SDLContext] handleHoleData get err: \(err)") } case .stunReply(_): //SDLLogger.shared.log("[SDLContext] get a stunReply: \(stunReply)") () } } - SDLLogger.shared.log("[SDLContext] udp signalTask cancel") + SDLLogger.log("[SDLContext] udp signalTask cancel") } self.udpHole = udpHole @@ -386,7 +386,7 @@ actor SDLContextActor { await self.whenRegistedSuper() break } - SDLLogger.shared.log("[SDLContext] register super failed, retry") + SDLLogger.log("[SDLContext] register super failed, retry") } self.registerTask = nil } @@ -399,7 +399,7 @@ actor SDLContextActor { self.updatePolicyTask = Task { while !Task.isCancelled { try? await Task.sleep(for: .seconds(300)) - SDLLogger.shared.log("[SDLContext] updatePolicyTask execute") + SDLLogger.log("[SDLContext] updatePolicyTask execute") await self.identifyStore.batUpdatePolicy(using: self.quicClient, dstIdentityID: self.config.identityId) } } @@ -427,7 +427,7 @@ actor SDLContextActor { private func handleRegisterSuperAck(registerSuperAck: SDLRegisterSuperAck) async { // 需要对数据通过rsa的私钥解码 guard let key = try? self.rsaCipher.decode(data: Data(registerSuperAck.key)) else { - SDLLogger.shared.log("[SDLContext] registerSuperAck invalid key", level: .error) + SDLLogger.log("[SDLContext] registerSuperAck invalid key") self.provider.cancelTunnelWithError(SDLError.invalidKey) return } @@ -442,20 +442,20 @@ actor SDLContextActor { case "chacha20": self.dataCipher = CCChaCha20Cipher(regionId: regionId, keyData: key) default: - SDLLogger.shared.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)", level: .error) + SDLLogger.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)") self.provider.cancelTunnelWithError(SDLError.unsupportedAlgorithm(algorithm: algorithm)) return } - SDLLogger.shared.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)", level: .info) + SDLLogger.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)") // 服务器分配的tun网卡信息 do { try await self.setNetworkSettings(config: self.config, dnsServer: DNSHelper.dnsServer) - SDLLogger.shared.log("[SDLContext] setNetworkSettings successed") + SDLLogger.log("[SDLContext] setNetworkSettings successed") self.state = .registered self.startReader() } catch let err { - SDLLogger.shared.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error) + SDLLogger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)") self.provider.cancelTunnelWithError(err) } } @@ -478,7 +478,7 @@ actor SDLContextActor { let alertNotice = NoticeMessage.alert(alert: errorMessage) self.noticeClient?.send(data: alertNotice) } - SDLLogger.shared.log("[SDLContext] Get a SuperNak message exit", level: .warning) + SDLLogger.log("[SDLContext] Get a SuperNak message exit") } @@ -486,10 +486,10 @@ actor SDLContextActor { switch event.event { case .natChanged(let natChangedEvent): let dstMac = natChangedEvent.mac - SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info) + SDLLogger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)") sessionManager.removeSession(dstMac: dstMac) case .sendRegister(let sendRegisterEvent): - SDLLogger.shared.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug) + SDLLogger.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)") let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp) if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) { // 发送register包 @@ -524,14 +524,14 @@ actor SDLContextActor { registerSuper.accessToken = self.config.accessToken if let registerSuperData = try? registerSuper.serializedData() { - SDLLogger.shared.log("[SDLContext] will send register super") + SDLLogger.log("[SDLContext] will send register super") self.quicClient?.send(type: .registerSuper, data: registerSuperData) } } private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws { let networkAddr = config.networkAddress - SDLLogger.shared.log("[SDLContext] register packet: \(register), network_address: \(networkAddr)", level: .debug) + SDLLogger.log("[SDLContext] register packet: \(register), network_address: \(networkAddr)") // 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下 if register.dstMac == networkAddr.mac && register.networkID == networkAddr.networkId { @@ -546,7 +546,7 @@ actor SDLContextActor { let session = Session(dstMac: register.srcMac, natAddress: remoteAddress) self.sessionManager.addSession(session: session) } else { - SDLLogger.shared.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning) + SDLLogger.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)") } } @@ -557,7 +557,7 @@ actor SDLContextActor { let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress) self.sessionManager.addSession(session: session) } else { - SDLLogger.shared.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning) + SDLLogger.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)") } } @@ -584,18 +584,18 @@ actor SDLContextActor { if arpPacket.targetIP == networkAddr.ip { switch arpPacket.opcode { case .request: - SDLLogger.shared.log("[SDLContext] get arp request packet", level: .debug) + SDLLogger.log("[SDLContext] get arp request packet") let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip) await self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal()) case .response: - SDLLogger.shared.log("[SDLContext] get arp response packet", level: .debug) + SDLLogger.log("[SDLContext] get arp response packet") await self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC) } } else { - SDLLogger.shared.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug) + SDLLogger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))") } } else { - SDLLogger.shared.log("[SDLContext] get invalid arp packet", level: .debug) + SDLLogger.log("[SDLContext] get invalid arp packet") } case .ipv4: // 有数据是通过出口网关转发的,所有只判断是合法的ip包 @@ -610,20 +610,20 @@ actor SDLContextActor { if true || self.checkPolicy(ipPacket: ipPacket, ruleMap: ruleMap) { // 用来做debug if ipPacket.header.source == 168428037 { - SDLLogger.sharedDebug.log("data: \(Array(ipPacket.data)), len: \(ipPacket.data.count)") + SDLLogger.log("data: \(Array(ipPacket.data)), len: \(ipPacket.data.count)", for: .debug) } let packet = NEPacket(data: ipPacket.data, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([packet]) - SDLLogger.shared.log("[SDLContext] identity: \(data.identityID), allow, data count: \(ipPacket.data.count)", level: .debug) + SDLLogger.log("[SDLContext] identity: \(data.identityID), allow, data count: \(ipPacket.data.count)", for: .debug) } else { - SDLLogger.shared.log("[SDLContext] not found identity: \(data.identityID) ruleMap", level: .debug) + SDLLogger.log("[SDLContext] not found identity: \(data.identityID) ruleMap", for: .debug) // 向服务器请求权限逻辑 await self.identifyStore.policyRequest(srcIdentityId: data.identityID, dstIdentityId: self.config.identityId, using: self.quicClient) } default: - SDLLogger.shared.log("[SDLContext] get invalid packet", level: .debug) + SDLLogger.log("[SDLContext] get invalid packet", for: .debug) } } @@ -710,14 +710,14 @@ actor SDLContextActor { if let dnsMessage = dnsParser.parse(), let name = dnsMessage.questions.first?.name { // 如果是内部域名,则转发整个ip包的内容到云端服务器 if name.contains(self.config.networkAddress.networkDomain) { - SDLLogger.shared.log("[SDLContext] get cloud dns request: \(name)") + SDLLogger.log("[SDLContext] get cloud dns request: \(name)") self.dnsClient?.forward(ipPacketData: packet.data) } // 通过本地的dns解析,发送的是udp的payload部分 else { // 尝试解析下对不对 let dnsPayload = Data(packet.data[payloadOffset.. Void) -> Task { diff --git a/Tun/Punchnet/Actors/SDLPuncherActor.swift b/Tun/Punchnet/Actors/SDLPuncherActor.swift index 1ebb812..3e1367e 100644 --- a/Tun/Punchnet/Actors/SDLPuncherActor.swift +++ b/Tun/Punchnet/Actors/SDLPuncherActor.swift @@ -62,7 +62,7 @@ actor SDLPuncherActor { } if let remoteAddress = try? await peerInfo.v4Info.socketAddress() { - SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug) + SDLLogger.log("[SDLContext] hole sock address: \(remoteAddress)", for: .punchnet) // 发送register包 var register = SDLRegister() register.networkID = requestContext.request.networkId diff --git a/Tun/Punchnet/Actors/SDLQuicClient.swift b/Tun/Punchnet/Actors/SDLQuicClient.swift index a34e934..2fa951b 100644 --- a/Tun/Punchnet/Actors/SDLQuicClient.swift +++ b/Tun/Punchnet/Actors/SDLQuicClient.swift @@ -61,7 +61,7 @@ final class SDLQUICClient { func start() { connection.stateUpdateHandler = { state in - SDLLogger.shared.log("[SDLQUICClient] new state: \(state)") + SDLLogger.log("[SDLQUICClient] new state: \(state)", for: .debug) switch state { case .ready: self.readyCont.yield() @@ -118,7 +118,7 @@ final class SDLQUICClient { self.send(type: .ping, data: Data()) } - SDLLogger.shared.log("[SDLQUICClient] udp pingTask cancel") + SDLLogger.log("[SDLQUICClient] udp pingTask cancel", for: .debug) } } @@ -131,7 +131,7 @@ final class SDLQUICClient { connection.send(content: packet, completion: .contentProcessed { error in if let error { - SDLLogger.shared.log("[SDLQUICClient] send data get error: \(error)") + SDLLogger.log("[SDLQUICClient] send data get error: \(error)", for: .debug) } }) } @@ -239,14 +239,14 @@ final class SDLQUICClient { case .event: guard let bytes = buffer.readBytes(length: buffer.readableBytes), let event = try? SDLEvent(serializedBytes: bytes) else { - SDLLogger.shared.log("SDLQUICClient decode Event Error") + SDLLogger.log("SDLQUICClient decode Event Error", for: .debug) return nil } return .event(event) case .pong: return .pong default: - SDLLogger.shared.log("SDLQUICClient decode miss type: \(type)") + SDLLogger.log("SDLQUICClient decode miss type: \(type)", for: .debug) return nil } @@ -273,7 +273,7 @@ extension SDLQUICClient { // --- Step 1: 系统验证 --- var error: CFError? guard SecTrustEvaluateWithError(secTrust, &error) else { - SDLLogger.shared.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")") + SDLLogger.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")", for: .debug) return false } @@ -282,21 +282,21 @@ extension SDLQUICClient { SecTrustSetPolicies(secTrust, policy) guard SecTrustEvaluateWithError(secTrust, &error) else { - SDLLogger.shared.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")") + SDLLogger.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")", for: .debug) return false } // --- Step 3: 获取叶子证书 --- guard let chain = SecTrustCopyCertificateChain(secTrust) as? [SecCertificate], let leafCertificate = chain.first else { - SDLLogger.shared.log("❌ 无法获取证书链或叶子证书") + SDLLogger.log("❌ 无法获取证书链或叶子证书", for: .debug) return false } // --- Step 4: 提取公钥 --- guard let publicKey = SecCertificateCopyKey(leafCertificate), let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, nil) as Data? else { - SDLLogger.shared.log("❌ 无法提取公钥") + SDLLogger.log("❌ 无法提取公钥", for: .debug) return false } @@ -305,10 +305,10 @@ extension SDLQUICClient { let hashBase64 = Data(hash).base64EncodedString() if pinnedPublicKeyHashes.contains(hashBase64) { - SDLLogger.shared.log("✅ 公钥校验通过") + SDLLogger.log("✅ 公钥校验通过", for: .debug) return true } else { - SDLLogger.shared.log("⚠️ 公钥不匹配! 收到: \(hashBase64)") + SDLLogger.log("⚠️ 公钥不匹配! 收到: \(hashBase64)", for: .debug) return false } } diff --git a/Tun/Punchnet/Actors/SDLSupervisor.swift b/Tun/Punchnet/Actors/SDLSupervisor.swift index c916b87..16969fc 100644 --- a/Tun/Punchnet/Actors/SDLSupervisor.swift +++ b/Tun/Punchnet/Actors/SDLSupervisor.swift @@ -16,7 +16,7 @@ actor SDLSupervisor { } catch is CancellationError { break } catch let err { - SDLLogger.shared.log("[Supervisor] worker \(name) crashed: \(err.localizedDescription)") + SDLLogger.log("[Supervisor] worker \(name) crashed: \(err.localizedDescription)", for: .punchnet) try? await Task.sleep(for: retryDelay) } } diff --git a/Tun/Punchnet/DNS/DNSCloudClient.swift b/Tun/Punchnet/DNS/DNSCloudClient.swift index 8a7a6a6..23e33ad 100644 --- a/Tun/Punchnet/DNS/DNSCloudClient.swift +++ b/Tun/Punchnet/DNS/DNSCloudClient.swift @@ -9,7 +9,6 @@ import Network final class DNSCloudClient { private var connection: NWConnection? - private let logger: SDLLogger private let dnsServerAddress: NWEndpoint // 用于对外输出收到的 DNS 响应包 @@ -21,8 +20,7 @@ final class DNSCloudClient { /// - Parameter host: 你的 sn-server 地址 (如 "8.8.8.8") /// - Parameter port: 端口 (如 53) - init(host: String, port: UInt16, logger: SDLLogger) { - self.logger = logger + init(host: String, port: UInt16 ) { self.dnsServerAddress = .hostPort(host: NWEndpoint.Host(host), port: NWEndpoint.Port(integerLiteral: port)) let (stream, continuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded) @@ -46,10 +44,10 @@ final class DNSCloudClient { connection.stateUpdateHandler = { [weak self] state in switch state { case .ready: - self?.logger.log("[DNSClient] Connection ready", level: .debug) + SDLLogger.log("[DNSClient] Connection ready", for: .debug) self?.receiveLoop() // 开始循环接收数据 case .failed(let error): - self?.logger.log("[DNSClient] Connection failed: \(error)", level: .error) + SDLLogger.log("[DNSClient] Connection failed: \(error)", for: .debug) self?.stop() case .cancelled: self?.packetContinuation.finish() @@ -89,7 +87,7 @@ final class DNSCloudClient { connection.send(content: ipPacketData, completion: .contentProcessed { [weak self] error in if let error = error { - self?.logger.log("[DNSClient] Send error: \(error)", level: .error) + SDLLogger.log("[DNSClient] Send error: \(error)", for: .debug) } }) } diff --git a/Tun/Punchnet/DNS/DNSLocalClient.swift b/Tun/Punchnet/DNS/DNSLocalClient.swift index d2c1a7e..1407ca0 100644 --- a/Tun/Punchnet/DNS/DNSLocalClient.swift +++ b/Tun/Punchnet/DNS/DNSLocalClient.swift @@ -44,7 +44,7 @@ final class DNSLocalClient { case .ready: self?.receiveLoop(for: conn) case .failed(let error): - SDLLogger.shared.log("[DNSLocalClient] failed with error: \(error.localizedDescription)") + SDLLogger.log("[DNSLocalClient] failed with error: \(error.localizedDescription)", for: .debug) self?.stop() case .cancelled: self?.packetContinuation.finish() diff --git a/Tun/Punchnet/SDLLogger.swift b/Tun/Punchnet/SDLLogger.swift index c3dc148..3d26fb5 100644 --- a/Tun/Punchnet/SDLLogger.swift +++ b/Tun/Punchnet/SDLLogger.swift @@ -9,44 +9,33 @@ import os public class SDLLogger: @unchecked Sendable { - public enum Subsystem: String { + public enum Subsystem: String, CaseIterable { case punchnet = "com.jihe.punchnet" - case debug = "com.jihe.punchnetdebug" + case debug = "com.jihe.punchnet.debug" + case trace = "com.jihe.punchnet.trace" } - public enum Level: Int8, CustomStringConvertible { - case debug = 0 - case info = 1 - case warning = 2 - case error = 3 - - public var description: String { - switch self { - case .debug: - return "Debug" - case .info: - return "Info" - case .warning: - return "Warning" - case .error: - return "Error" - } + static var loggers: [String: SDLLogger] { + var loggers: [String: SDLLogger] = [:] + for sub in Subsystem.allCases { + loggers[sub.rawValue] = .init(subsystem: sub) } + return loggers } - static let shared = SDLLogger(level: .debug, subsystem: .punchnet) - static let sharedDebug = SDLLogger(level: .debug, subsystem: .debug) - - private let level: Level private let log: Logger - private init(level: Level, subsystem: Subsystem) { - self.level = level + private init(subsystem: Subsystem) { self.log = Logger(subsystem: subsystem.rawValue, category: "punchnet") } - public func log(_ message: String, level: Level = .debug) { + public func _log(_ message: String) { self.log.info("\(message, privacy: .public)") } + public static func log(_ message: String, for system: Subsystem = .punchnet) { + if let logger = loggers[system.rawValue] { + logger._log(message) + } + } } diff --git a/Tun/Punchnet/SDLNoticeClient.swift b/Tun/Punchnet/SDLNoticeClient.swift index dc3b7a7..ded2171 100644 --- a/Tun/Punchnet/SDLNoticeClient.swift +++ b/Tun/Punchnet/SDLNoticeClient.swift @@ -38,7 +38,6 @@ final class SDLNoticeClient { } self.channel = try bootstrap.bind(host: "0.0.0.0", port: 0).wait() - SDLLogger.shared.log("[SDLNoticeClient] started", level: .debug) } func start() { diff --git a/Tun/Punchnet/SDLUDPHole.swift b/Tun/Punchnet/SDLUDPHole.swift index c17407a..e00a88c 100644 --- a/Tun/Punchnet/SDLUDPHole.swift +++ b/Tun/Punchnet/SDLUDPHole.swift @@ -45,7 +45,6 @@ final class SDLUDPHole: ChannelInboundHandler { } let channel = try bootstrap.bind(host: "0.0.0.0", port: 0).wait() - SDLLogger.shared.log("[UDPHole] started", level: .debug) self.channel = channel } @@ -81,17 +80,17 @@ final class SDLUDPHole: ChannelInboundHandler { let remoteAddress = envelope.remoteAddress if let rawBytes = buffer.getBytes(at: buffer.readerIndex, length: buffer.readableBytes) { - SDLLogger.shared.log("[SDLUDPHole] get raw bytes: \(rawBytes.count), from: \(remoteAddress)") + SDLLogger.log("[SDLUDPHole] get raw bytes: \(rawBytes.count), from: \(remoteAddress)", for: .punchnet) } do { if let message = try decode(buffer: &buffer) { self.messageContinuation.yield((remoteAddress, message)) } else { - SDLLogger.shared.log("[SDLUDPHole] decode message, get null", level: .warning) + SDLLogger.log("[SDLUDPHole] decode message, get null", for: .punchnet) } } catch let err { - SDLLogger.shared.log("[SDLUDPHole] decode message, get error: \(err)", level: .warning) + SDLLogger.log("[SDLUDPHole] decode message, get error: \(err)", for: .punchnet) } } @@ -128,7 +127,6 @@ final class SDLUDPHole: ChannelInboundHandler { private func decode(buffer: inout ByteBuffer) throws -> SDLHoleMessage? { guard let type = buffer.readInteger(as: UInt8.self), let packetType = SDLPacketType(rawValue: type) else { - SDLLogger.shared.log("[SDLUDPHole] decode error 11") return nil } @@ -164,7 +162,7 @@ final class SDLUDPHole: ChannelInboundHandler { } return .stunReply(stunReply) default: - SDLLogger.shared.log("SDLUDPHole decode miss type: \(type)") + SDLLogger.log("SDLUDPHole decode miss type: \(type)", for: .debug) return nil }