diff --git a/Tun/Context/SDLContextActor.swift b/Tun/Context/SDLContextActor.swift index 57a4c74..f3b7c5f 100644 --- a/Tun/Context/SDLContextActor.swift +++ b/Tun/Context/SDLContextActor.swift @@ -145,11 +145,11 @@ actor SDLContextActor { try await self.runRootBody() await self.cleanupRoot() } catch is CancellationError { - SDLLogger.fatal("[SDLContext] root task cancelled") + SDLLogger.fatal("[SDLContext] root task cancelled", category: .context) await self.cleanupRoot() throw CancellationError() } catch { - SDLLogger.fatal("[SDLContext] root task failed: \(error)") + SDLLogger.fatal("[SDLContext] root task failed: \(error)", category: .context) await self.readySignal.fail(error) await self.cleanupRoot() throw error @@ -160,7 +160,7 @@ actor SDLContextActor { do { try await self.readySignal.wait(timeout: .seconds(30)) } catch { - SDLLogger.fatal("[SDLContext] start failed while waiting ready signal: \(error)") + SDLLogger.fatal("[SDLContext] start failed while waiting ready signal: \(error)", category: .context) rootTask.cancel() _ = try? await rootTask.value self.rootTask = nil @@ -170,7 +170,7 @@ actor SDLContextActor { // 处理context的停止问题 public func stop() async { - SDLLogger.fatal("[SDLContext] stop requested") + SDLLogger.fatal("[SDLContext] stop requested", category: .context) let rootTask = self.rootTask self.rootTask = nil @@ -286,7 +286,7 @@ actor SDLContextActor { group.addTask { _ = try await readySignal.wait() try await Self.runPeriodic(name: "updatePolicyTask", interval: .seconds(10)) { - SDLLogger.log("[SDLContext] updatePolicyTask execute") + SDLLogger.log("[SDLContext] updatePolicyTask execute", category: .context) await policyService.updatePolicy(superService: superService) } } @@ -313,7 +313,7 @@ actor SDLContextActor { } guard let client = SDLIPV6AssistClient(assistServerInfo: assistInfo) else { - SDLLogger.log("[SDLContext] invalid ipv6 assist config", for: .debug) + SDLLogger.log("[SDLContext] invalid ipv6 assist config", category: .context) continue } @@ -324,7 +324,7 @@ actor SDLContextActor { } catch is CancellationError { throw CancellationError() } catch { - SDLLogger.log("[SDLContext] ipv6 assist client ended: \(error.localizedDescription)", for: .debug) + SDLLogger.log("[SDLContext] ipv6 assist client ended: \(error.localizedDescription)", category: .context) } if self.ipv6AssistClient === client { @@ -371,7 +371,7 @@ actor SDLContextActor { } deinit { - SDLLogger.log("[SDLContext] deinit", for: .debug) + SDLLogger.log("[SDLContext] deinit", category: .context) } } @@ -391,7 +391,7 @@ extension SDLContextActor { // 旧的 UDP NoticeClient 已移除,改为初始化基于 App Group 的通知通道。 SDLTunnelAppNotifier.shared.clear() - SDLLogger.log("[SDLContext] tunnelAppNotifier ready") + SDLLogger.log("[SDLContext] tunnelAppNotifier ready", category: .context) } private func publishTunnelEvent(code: Int? = nil, message: String) { @@ -407,7 +407,7 @@ extension SDLContextActor { case .v6: await self.udpHoleV6Service.send(type: type, data: data, remoteAddress: remoteAddress) default: - SDLLogger.log("[SDLContext] unsupported socket family: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLContext] unsupported socket family: \(remoteAddress)", category: .context) } } @@ -438,7 +438,7 @@ extension SDLContextActor { case .requestExposedService: await self.requestExposedService() case .shutdown(let message): - SDLLogger.fatal("[SDLContext] Super shutdown received: \(message)") + SDLLogger.fatal("[SDLContext] Super shutdown received: \(message)", category: .context) self.publishTunnelEvent(message: message) let error = NSError(domain: "com.jihe.punchnet.tun", code: -2) self.provider.cancelTunnelWithError(error) @@ -458,17 +458,17 @@ extension SDLContextActor { do { try await self.tunNetworkManager.apply(settings: .init(config: self.config), dnsServer: DNSHelper.dnsServer) - SDLLogger.log("[SDLContext] setNetworkSettings successed") + SDLLogger.log("[SDLContext] setNetworkSettings successed", category: .context) await self.readySignal.succeed(()) } catch { - SDLLogger.fatal("[SDLContext] apply tunnel network settings failed: \(error)") - SDLLogger.log("[SDLContext] setTunnelNetworkSettings get error: \(error)") + SDLLogger.fatal("[SDLContext] apply tunnel network settings failed: \(error)", category: .context) + SDLLogger.log("[SDLContext] setTunnelNetworkSettings get error: \(error)", category: .context) await self.failTunnel(error) } } private func failTunnel(_ error: Error) async { - SDLLogger.fatal("[SDLContext] failTunnel: \(error)") + SDLLogger.fatal("[SDLContext] failTunnel: \(error)", category: .context) await self.readySignal.fail(error) self.provider.cancelTunnelWithError(error) } @@ -525,9 +525,9 @@ extension SDLContextActor { let probeReply = try? await self.ipv6AssistClient?.probe(requestTimeout: .seconds(3)) if let v6Info = probeReply?.v6Info, let v6Address = SDLUtil.ipv6DataToString(v6Info.v6) { - SDLLogger.log("[SDLContext] probe ipv6 address: \(v6Address)") + SDLLogger.log("[SDLContext] probe ipv6 address: \(v6Address)", category: .context) } else { - SDLLogger.log("[SDLContext] probe ipv6 address: empty") + SDLLogger.log("[SDLContext] probe ipv6 address: empty", category: .context) } await self.superControlPlane.sendStunRequest(natType: self.natType, v6Info: probeReply?.v6Info) @@ -561,12 +561,12 @@ extension SDLContextActor { do { try Task.checkCancellation() try await operation() - SDLLogger.log("[SDLContext] worker \(name) ended, will restart", for: .debug) + SDLLogger.log("[SDLContext] worker \(name) ended, will restart", category: .context) } catch is CancellationError { - SDLLogger.log("[SDLContext] worker \(name) cancelled", for: .debug) + SDLLogger.log("[SDLContext] worker \(name) cancelled", category: .context) throw CancellationError() } catch { - SDLLogger.log("[SDLContext] worker \(name) crashed: \(error.localizedDescription), will restart", for: .debug) + SDLLogger.log("[SDLContext] worker \(name) crashed: \(error.localizedDescription), will restart", category: .context) } try await Task.sleep(for: retryDelay) @@ -585,10 +585,10 @@ extension SDLContextActor { try await operation() try await Task.sleep(for: interval) } catch is CancellationError { - SDLLogger.log("[SDLContext] worker \(name) cancelled", for: .debug) + SDLLogger.log("[SDLContext] worker \(name) cancelled", category: .context) throw CancellationError() } catch { - SDLLogger.log("[SDLContext] worker \(name) crashed: \(error.localizedDescription), will retry", for: .debug) + SDLLogger.log("[SDLContext] worker \(name) crashed: \(error.localizedDescription), will retry", category: .context) try await Task.sleep(for: retryDelay) } } diff --git a/Tun/Context/SDLHoleControlPlane.swift b/Tun/Context/SDLHoleControlPlane.swift index b5e8b7e..2a19530 100644 --- a/Tun/Context/SDLHoleControlPlane.swift +++ b/Tun/Context/SDLHoleControlPlane.swift @@ -24,17 +24,17 @@ struct SDLHoleControlPlane { func handle(_ event: SDLUDPHoleService.Event) -> [HoleDecision] { switch event { case .ready(let localAddress): - SDLLogger.log("[SDLContext] udpHole ready: \(localAddress)") + SDLLogger.log("[SDLContext] udpHole ready: \(localAddress)", category: .udpHole) return [] case .natType(let natType): - SDLLogger.log("[SDLContext] nat_type is: \(natType)") + SDLLogger.log("[SDLContext] nat_type is: \(natType)", category: .udpHole) return [ .updateNatType(natType) ] case .packet(let remoteAddress, let message): return self.handlePacket(remoteAddress: remoteAddress, message: message) case .closed(let error): - SDLLogger.log("[SDLContext] udpHole closed: \(error)", for: .debug) + SDLLogger.log("[SDLContext] udpHole closed: \(error)", category: .udpHole) return [] } } @@ -42,7 +42,7 @@ struct SDLHoleControlPlane { private func handlePacket(remoteAddress: SocketAddress, message: SDLHoleControlMessage) -> [HoleDecision] { switch message { case .stunReply, .stunProbeReply: - SDLLogger.log("[SDLContext] get a stun reply", for: .debug) + SDLLogger.log("[SDLContext] get a stun reply", category: .udpHole) return [] case .register(let register): return self.handleRegister(remoteAddress: remoteAddress, register: register) @@ -52,11 +52,11 @@ struct SDLHoleControlPlane { } private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) -> [HoleDecision] { - SDLLogger.log("[SDLContext] register packet: \(register), network_address: \(self.networkAddress)") + SDLLogger.log("[SDLContext] register packet: \(register), network_address: \(self.networkAddress)", category: .udpHole) var decisions: [HoleDecision] = [] guard register.dstMac == self.networkAddress.mac && register.networkID == self.networkAddress.networkId else { - SDLLogger.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)") + SDLLogger.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", category: .udpHole) return decisions } @@ -72,7 +72,7 @@ struct SDLHoleControlPlane { if let session = self.makeSession(dstMac: register.srcMac, remoteAddress: remoteAddress) { decisions.append(.addSession(session)) } else { - SDLLogger.log("[SDLContext] didReadRegister get unsupported remoteAddress: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLContext] didReadRegister get unsupported remoteAddress: \(remoteAddress)", category: .udpHole) } return decisions @@ -80,12 +80,12 @@ struct SDLHoleControlPlane { private func handleRegisterAck(remoteAddress: SocketAddress, registerAck: SDLRegisterAck) -> [HoleDecision] { guard registerAck.dstMac == self.networkAddress.mac && registerAck.networkID == self.networkAddress.networkId else { - SDLLogger.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", for: .debug) + SDLLogger.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", category: .udpHole) return [] } guard let session = self.makeSession(dstMac: registerAck.srcMac, remoteAddress: remoteAddress) else { - SDLLogger.log("[SDLContext] didReadRegisterAck get unsupported remoteAddress: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLContext] didReadRegisterAck get unsupported remoteAddress: \(remoteAddress)", category: .udpHole) return [] } diff --git a/Tun/Context/SDLSuperControlPlane.swift b/Tun/Context/SDLSuperControlPlane.swift index f9e47f0..c1c1466 100644 --- a/Tun/Context/SDLSuperControlPlane.swift +++ b/Tun/Context/SDLSuperControlPlane.swift @@ -56,7 +56,7 @@ actor SDLSuperControlPlane { case .registerSuperNak(let registerSuperNak): await self.handleRegisterSuperNak(registerSuperNak) case .peerInfo(let peerInfo): - SDLLogger.log("[SDLContext] peer message: \(peerInfo)") + SDLLogger.log("[SDLContext] peer message: \(peerInfo)", category: .super) await self.onDecision(.resolvePeerInfo(peerInfo)) case .event(let event): await self.handleEvent(event) @@ -65,7 +65,7 @@ actor SDLSuperControlPlane { case .exposedServiceResponse(let response): await self.onDecision(.applyExposedServiceResponse(response)) case .arpResponse(let arpResponse): - SDLLogger.log("[SDLContext] get arp response: \(arpResponse)") + SDLLogger.log("[SDLContext] get arp response: \(arpResponse)", category: .super) await self.onDecision(.handleARPResponse(arpResponse)) } } @@ -93,7 +93,7 @@ actor SDLSuperControlPlane { } private func handleWelcome(_ welcome: SDLWelcome) async { - SDLLogger.log("[SDLContext] quic welcome: \(welcome)") + SDLLogger.log("[SDLContext] quic welcome: \(welcome)", category: .super) if welcome.hasIpv6Assist { await self.onDecision(.updateIPv6Assist(welcome.ipv6Assist)) @@ -102,13 +102,13 @@ actor SDLSuperControlPlane { } await self.doRegisterSuper() - SDLLogger.log("[SDLContext] quic doRegisterSuper") + SDLLogger.log("[SDLContext] quic doRegisterSuper", category: .super) } private func handleRegisterSuperAck(_ registerSuperAck: SDLRegisterSuperAck) async { guard let key = try? self.rsaCipher.decode(data: Data(registerSuperAck.key)) else { - SDLLogger.fatal("[SDLSuperControlPlane] registerSuperAck invalid key, will fail tunnel") - SDLLogger.log("[SDLContext] registerSuperAck invalid key") + SDLLogger.fatal("[SDLSuperControlPlane] registerSuperAck invalid key, will fail tunnel", category: .super) + SDLLogger.log("[SDLContext] registerSuperAck invalid key", category: .super) await self.onDecision(.failTunnel(SDLError.invalidKey)) return } @@ -124,13 +124,13 @@ actor SDLSuperControlPlane { case "chacha20": cipher = CCChaCha20Cipher(regionId: regionId, keyData: key) default: - SDLLogger.fatal("[SDLSuperControlPlane] unsupported cipher algorithm \(algorithm), will fail tunnel") - SDLLogger.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)") + SDLLogger.fatal("[SDLSuperControlPlane] unsupported cipher algorithm \(algorithm), will fail tunnel", category: .super) + SDLLogger.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)", category: .super) await self.onDecision(.failTunnel(SDLError.unsupportedAlgorithm(algorithm: algorithm))) return } - SDLLogger.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)") + SDLLogger.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)", category: .super) await self.onDecision(.completeRegistration(cipher: cipher)) } @@ -142,29 +142,29 @@ actor SDLSuperControlPlane { switch errorCode { case .invalidToken, .nodeDisabled: - SDLLogger.fatal("[SDLSuperControlPlane] SuperNak \(errorCode) will fail tunnel: \(errorMessage)") + SDLLogger.fatal("[SDLSuperControlPlane] SuperNak \(errorCode) will fail tunnel: \(errorMessage)", category: .super) await self.onDecision(.publishTunnelEvent(code: Int(errorCode.rawValue), message: errorMessage)) await self.onDecision(.failTunnel(NSError(domain: "com.jihe.punchnet.tun", code: -1))) case .noIpAddress, .networkFault, .internalFault: await self.onDecision(.publishTunnelEvent(code: Int(errorCode.rawValue), message: errorMessage)) } - SDLLogger.log("[SDLContext] Get a SuperNak message exit") + SDLLogger.log("[SDLContext] Get a SuperNak message exit", category: .super) } private func handleEvent(_ event: SDLEvent) async { switch event.event { case .natChanged(let natChangedEvent): let dstMac = natChangedEvent.mac - SDLLogger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)") + SDLLogger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", category: .super) await self.onDecision(.removeSession(dstMac: dstMac)) case .sendRegister(let sendRegisterEvent): await self.handleSendRegisterEvent(sendRegisterEvent) case .exposedServiceChanged: - SDLLogger.log("[SDLContext] exposedServiceChanged event") + SDLLogger.log("[SDLContext] exposedServiceChanged event", category: .super) await self.onDecision(.requestExposedService) case .shutdown(let shutdownEvent): - SDLLogger.fatal("[SDLSuperControlPlane] shutdown event received: \(shutdownEvent.message)") + SDLLogger.fatal("[SDLSuperControlPlane] shutdown event received: \(shutdownEvent.message)", category: .super) await self.onDecision(.shutdown(message: shutdownEvent.message)) case .none: () @@ -181,7 +181,7 @@ actor SDLSuperControlPlane { return } - SDLLogger.log("[SDLContext] sendRegisterEvent, ip: \(event)") + SDLLogger.log("[SDLContext] sendRegisterEvent, ip: \(event)", category: .super) if event.natIp > 0 && event.natPort > 0 { let address = SDLUtil.int32ToIp(event.natIp) @@ -207,7 +207,7 @@ actor SDLSuperControlPlane { registerSuper.accessToken = self.config.accessToken if let registerSuperData = try? registerSuper.serializedData() { - SDLLogger.log("[SDLContext] will send register super") + SDLLogger.log("[SDLContext] will send register super", category: .super) await self.onDecision(.sendSuper(type: .registerSuper, data: registerSuperData)) } } diff --git a/Tun/DNS/DNSCloudClient.swift b/Tun/DNS/DNSCloudClient.swift index 721fdbf..fda96f6 100644 --- a/Tun/DNS/DNSCloudClient.swift +++ b/Tun/DNS/DNSCloudClient.swift @@ -106,7 +106,7 @@ actor DNSCloudClient { await self.readySignal.fail(DNSCloudError.cancelled) self.finishPacketContinuationIfNeed(throwing: nil) - SDLLogger.log("[SDLCloudClient] stopped") + SDLLogger.log("[SDLCloudClient] stopped", category: .dns) } private func handleConnectionStateUpdate(_ state: NWConnection.State) async { @@ -116,7 +116,7 @@ actor DNSCloudClient { return } - SDLLogger.log("[DNSClient] Connection ready", for: .debug) + SDLLogger.log("[DNSClient] Connection ready", category: .dns) await self.readySignal.succeed(()) case .failed(let error): await self.readySignal.fail(DNSCloudError.failed(error)) @@ -168,7 +168,7 @@ actor DNSCloudClient { } deinit { - SDLLogger.log("[DNSCloudClient] deinit", for: .debug) + SDLLogger.log("[DNSCloudClient] deinit", category: .dns) } } diff --git a/Tun/DNS/DNSLocalClient.swift b/Tun/DNS/DNSLocalClient.swift index 98c615d..f037587 100644 --- a/Tun/DNS/DNSLocalClient.swift +++ b/Tun/DNS/DNSLocalClient.swift @@ -44,7 +44,7 @@ actor DNSLocalClient { self.packetContinuation = continuation self.packetContinuation.onTermination = { termination in - SDLLogger.log("[DNSLocalClient] packetFlow terminated: \(termination)") + SDLLogger.log("[DNSLocalClient] packetFlow terminated: \(termination)", category: .dns) } let parameters = NWParameters.udp @@ -110,7 +110,7 @@ actor DNSLocalClient { } guard let allocatedTransactionID = self.allocateTransactionID() else { - SDLLogger.log("[DNSLocalClient] no available transaction id", for: .debug) + SDLLogger.log("[DNSLocalClient] no available transaction id", category: .dns) return } @@ -140,7 +140,7 @@ actor DNSLocalClient { self.finishPacketContinuationIfNeed(throwing: nil) - SDLLogger.log("[SDLLocalClient] stopped") + SDLLogger.log("[SDLLocalClient] stopped", category: .dns) } private func handleConnectionStateUpdate(_ state: NWConnection.State) async { @@ -266,7 +266,7 @@ actor DNSLocalClient { } deinit { - SDLLogger.log("[DNSLocalClient] deinit", for: .debug) + SDLLogger.log("[DNSLocalClient] deinit", category: .dns) } } diff --git a/Tun/DNS/DNSLocalService.swift b/Tun/DNS/DNSLocalService.swift index 2706766..0de6bc7 100644 --- a/Tun/DNS/DNSLocalService.swift +++ b/Tun/DNS/DNSLocalService.swift @@ -19,7 +19,7 @@ actor DNSLocalService { let client = DNSLocalClient(host: dnsServer) self.currentClient = client - SDLLogger.log("[DNSLocalService] dnsLocalClient started") + SDLLogger.log("[DNSLocalService] dnsLocalClient started", category: .dns) do { try await self.run(client: client) diff --git a/Tun/Diagnostics/SDLLogger.swift b/Tun/Diagnostics/SDLLogger.swift index ac92f12..6831486 100644 --- a/Tun/Diagnostics/SDLLogger.swift +++ b/Tun/Diagnostics/SDLLogger.swift @@ -7,62 +7,64 @@ import Foundation import os -public class SDLLogger: @unchecked Sendable { +public final class SDLLogger: @unchecked Sendable { - public enum Subsystem: CaseIterable { - case debug - case trace + 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 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 static let subsystem = "com.jihe.punchnet.tun" + private static let loggers: [Category: SDLLogger] = { + Dictionary(uniqueKeysWithValues: Category.allCases.map { ($0, SDLLogger(category: $0)) }) }() - private let log: Logger + private let logger: 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") + private init(category: Category) { + self.logger = Logger(subsystem: Self.subsystem, category: category.rawValue) } - public func _log(_ message: String) { - self.log.info("\(message, privacy: .public)") + private func log(_ message: String) { + self.logger.info("\(message, privacy: .public)") } - public func _fatal(_ message: String) { - self.log.fault("\(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, for system: Subsystem = .debug) { - guard self.isEnabled(system), let logger = loggers[system] else { + public static func log(_ message: @autoclosure () -> String, category: Category = .context) { + guard let logger = loggers[category] else { return } - logger._log(message()) + logger.log(message()) } - public static func fatal(_ message: @autoclosure () -> String, for system: Subsystem = .debug) { - guard let logger = loggers[system] else { + public static func trace(_ message: @autoclosure () -> String, category: Category) { + guard let logger = loggers[category] else { return } - logger._fatal(message()) + logger.trace(message()) } - private static func isEnabled(_ system: Subsystem) -> Bool { - switch system { - case .debug: - return self.debugLoggingEnabled - case .trace: - return self.traceLoggingEnabled + public static func fatal(_ message: @autoclosure () -> String, category: Category = .context) { + guard let logger = loggers[category] else { + return } + + logger.fatal(message()) } } diff --git a/Tun/Inbound/PacketInboundActor.swift b/Tun/Inbound/PacketInboundActor.swift index 38bbee9..3f976cd 100644 --- a/Tun/Inbound/PacketInboundActor.swift +++ b/Tun/Inbound/PacketInboundActor.swift @@ -84,22 +84,22 @@ actor PacketInboundActor { switch plan.action { case .sendARPReply(let dstMac, let responseData): - SDLLogger.log("[PacketInboundActor] get arp request packet") + SDLLogger.log("[PacketInboundActor] get arp request packet", category: .packet) await self.packetOutboundActor.routeLayerPacket(dstMac: dstMac, type: .arp, data: responseData) case .appendARP(let ip, let mac): - SDLLogger.log("[PacketInboundActor] get arp response packet") + SDLLogger.log("[PacketInboundActor] get arp response packet", category: .packet) await self.arpResolver.append(ip: ip, mac: mac) case .writeToTun(let packetData, let identityID): let packet = NEPacket(data: packetData, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([packet]) - SDLLogger.log("[PacketInboundActor] hole identity: \(identityID), allow, data count: \(packetData.count)", for: .trace) + SDLLogger.trace("[PacketInboundActor] hole identity: \(identityID), allow, data count: \(packetData.count)", category: .packet) case .requestPolicy(let context): - SDLLogger.log("[PacketInboundActor] policy miss, \(context.logDescription)", for: .debug) + SDLLogger.log("[PacketInboundActor] policy miss, \(context.logDescription)", category: .packet) if let queryData = await self.policyService.makePolicyRequest(srcIdentityID: context.srcIdentityID) { await self.superService.send(type: .policyRequest, data: queryData) } case .dropByPolicy(let context): - SDLLogger.log("[PacketInboundActor] policy denied, \(context.logDescription)", for: .trace) + SDLLogger.trace("[PacketInboundActor] policy denied, \(context.logDescription)", category: .packet) case .none: () } @@ -130,7 +130,7 @@ actor PacketInboundActor { policyRuntime: policyRuntime ) default: - SDLLogger.log("[SDLContext] get invalid packet", for: .debug) + SDLLogger.log("[SDLContext] get invalid packet", category: .packet) return .init(inboundBytes: inboundBytes, action: .none) } } @@ -152,10 +152,10 @@ actor PacketInboundActor { ) } } else { - SDLLogger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(self.networkAddress.ip))") + SDLLogger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(self.networkAddress.ip))", category: .packet) } } else { - SDLLogger.log("[SDLContext] get invalid arp packet") + SDLLogger.log("[SDLContext] get invalid arp packet", category: .packet) } return .init(inboundBytes: inboundBytes, action: .none) diff --git a/Tun/Network/SDLIPV6AssistClient.swift b/Tun/Network/SDLIPV6AssistClient.swift index 8be7911..da132b2 100644 --- a/Tun/Network/SDLIPV6AssistClient.swift +++ b/Tun/Network/SDLIPV6AssistClient.swift @@ -172,9 +172,9 @@ actor SDLIPV6AssistClient { switch state { case .ready: - SDLLogger.log("[SDLIPV6AssistClient] Connection ready", for: .debug) + SDLLogger.log("[SDLIPV6AssistClient] Connection ready", category: .network) case .failed(let error): - SDLLogger.log("[SDLIPV6AssistClient] Connection failed: \(error)", for: .debug) + SDLLogger.log("[SDLIPV6AssistClient] Connection failed: \(error)", category: .network) self.stop(pendingError: error) case .cancelled: self.stop() @@ -191,7 +191,7 @@ actor SDLIPV6AssistClient { request.continuation.resume(returning: packet) } } catch { - SDLLogger.log("[SDLIPV6AssistClient] Receive error: \(error)", for: .debug) + SDLLogger.log("[SDLIPV6AssistClient] Receive error: \(error)", category: .network) } } diff --git a/Tun/Outbound/PacketOutboundActor.swift b/Tun/Outbound/PacketOutboundActor.swift index fcd9fd4..405a005 100644 --- a/Tun/Outbound/PacketOutboundActor.swift +++ b/Tun/Outbound/PacketOutboundActor.swift @@ -94,7 +94,7 @@ actor PacketOutboundActor { } } - SDLLogger.log("[PacketOutboundActor] packet reader task finished") + SDLLogger.log("[PacketOutboundActor] packet reader task finished", category: .packet) } func handleTunPacket(_ packet: IPPacketView) async { @@ -106,15 +106,15 @@ actor PacketOutboundActor { let nePacket = NEPacket(data: ipPacketData, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([nePacket]) case .cloudDNS(let name, let ipPacketData): - SDLLogger.log("[PacketOutboundActor] get cloud dns request: \(name)") + SDLLogger.log("[PacketOutboundActor] get cloud dns request: \(name)", category: .packet) await self.dnsCloudService.forward(ipPacketData: ipPacketData) case .localDNS(let name, let payload, let tracker): - SDLLogger.log("[PacketOutboundActor] get local dns request: \(name)") + SDLLogger.log("[PacketOutboundActor] get local dns request: \(name)", category: .packet) await self.dnsLocalService.query(tracker: tracker, dnsPayload: payload) case .forwardToNextHop(let ip, let type, let data, let kind): await self.forwardPacketToNextHop(ip: ip, type: type, data: data, kind: kind, originalPacket: packet) case .drop(let reason): - SDLLogger.log("[PacketOutboundActor] drop tun packet, reason: \(reason.rawValue)", for: .trace) + SDLLogger.trace("[PacketOutboundActor] drop tun packet, reason: \(reason.rawValue)", category: .packet) } } @@ -125,19 +125,19 @@ actor PacketOutboundActor { originalPacket: IPPacketView) async { switch kind { case .sameNetwork: - SDLLogger.log("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)) same network", for: .trace) + SDLLogger.trace("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)) same network", category: .packet) case .exitNode, .dnsExitNode: - SDLLogger.log("[PacketOutboundActor] use exit_node: \(SDLUtil.int32ToIp(ip))", for: .trace) + SDLLogger.trace("[PacketOutboundActor] use exit_node: \(SDLUtil.int32ToIp(ip))", category: .packet) } if let dstMac = self.arpResolver.snapshot().lookup(ip) { - SDLLogger.log("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", for: .trace) + SDLLogger.trace("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", category: .packet) let didSend = await self.routeLayerPacket(dstMac: dstMac, type: type, data: data) if didSend { self.policyService.recordOutboundFlow(ipPacket: originalPacket) } } else { - SDLLogger.log("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)) arp query not found, broadcast", for: .trace) + SDLLogger.trace("[PacketOutboundActor] dstIp: \(SDLUtil.int32ToIp(ip)) arp query not found, broadcast", category: .packet) if let arpRequest = try? await self.arpResolver.makeArpRequest(targetIp: ip) { await self.superService.send(type: .arpRequest, data: arpRequest) } @@ -154,12 +154,12 @@ actor PacketOutboundActor { case .superNode(let payload): await self.sendSuperPacket(type: .data, data: payload) case .peer(let payload, let session): - SDLLogger.log("[PacketOutboundActor] send packet by session: \(session)", for: .trace) + SDLLogger.trace("[PacketOutboundActor] send packet by session: \(session)", category: .packet) await self.sendPeerPacket(type: .data, data: payload, remoteAddress: session.natAddress) self.flowTracer.inc(num: payload.count, type: .p2p) case .superNodeAndPunch(let payload, let request): await self.sendSuperPacket(type: .data, data: payload) - SDLLogger.log("[PacketOutboundActor] send packet by super: \(self.stunSocketAddress)", for: .trace) + SDLLogger.trace("[PacketOutboundActor] send packet by super: \(self.stunSocketAddress)", category: .packet) self.flowTracer.inc(num: payload.count, type: .forward) if let queryData = await self.puncherActor.makeQueryInfoRequest(request: request) { @@ -243,7 +243,7 @@ actor PacketOutboundActor { case .v6: await self.udpHoleV6Service.send(type: type, data: data, remoteAddress: remoteAddress) default: - SDLLogger.log("[PacketOutboundActor] unsupported socket family: \(remoteAddress)", for: .debug) + SDLLogger.log("[PacketOutboundActor] unsupported socket family: \(remoteAddress)", category: .packet) } } } diff --git a/Tun/PacketTunnelProvider.swift b/Tun/PacketTunnelProvider.swift index a587514..47a4ad4 100644 --- a/Tun/PacketTunnelProvider.swift +++ b/Tun/PacketTunnelProvider.swift @@ -30,7 +30,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) { guard let options, let config = SDLConfiguration.parse(options: options) else { - SDLLogger.fatal("[PacketTunnelProvider] startTunnel failed: invalid configuration") + SDLLogger.fatal("[PacketTunnelProvider] startTunnel failed: invalid configuration", category: .app) completionHandler(TunnelError.invalidConfiguration) return } @@ -40,7 +40,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) { - SDLLogger.fatal("[PacketTunnelProvider] stopTunnel requested, reason: \(reason.rawValue)") + SDLLogger.fatal("[PacketTunnelProvider] stopTunnel requested, reason: \(reason.rawValue)", category: .app) self.stopContext(clearRuntimeConfiguration: true, completionHandler: completionHandler) } @@ -63,21 +63,21 @@ class PacketTunnelProvider: NEPacketTunnelProvider { } override func sleep(completionHandler: @escaping () -> Void) { - SDLLogger.fatal("[PacketTunnelProvider] sleep requested, will stop current context") + SDLLogger.fatal("[PacketTunnelProvider] sleep requested, will stop current context", category: .app) self.stopContext(clearRuntimeConfiguration: false) { - SDLLogger.log("[PacketTunnelProvider] sleep") + SDLLogger.log("[PacketTunnelProvider] sleep", category: .app) completionHandler() } } override func wake() { - SDLLogger.log("[PacketTunnelProvider] wake up!!!!!!!") + SDLLogger.log("[PacketTunnelProvider] wake up!!!!!!!", category: .app) self.startCachedContext { err in if let err { - SDLLogger.fatal("[PacketTunnelProvider] wakeup start failed: \(err)") - SDLLogger.log("[PacketTunnelProvider] wakeup start failed: \(err.localizedDescription)") + SDLLogger.fatal("[PacketTunnelProvider] wakeup start failed: \(err)", category: .app) + SDLLogger.log("[PacketTunnelProvider] wakeup start failed: \(err.localizedDescription)", category: .app) } else { - SDLLogger.log("[PacketTunnelProvider] wakeup and try start") + SDLLogger.log("[PacketTunnelProvider] wakeup and try start", category: .app) } } } @@ -123,7 +123,7 @@ private extension PacketTunnelProvider { self.runtimeLock.unlock() guard let config, let rsaCipher else { - SDLLogger.fatal("[PacketTunnelProvider] startCachedContext failed: missing cached runtime configuration") + SDLLogger.fatal("[PacketTunnelProvider] startCachedContext failed: missing cached runtime configuration", category: .app) completionHandler(TunnelError.invalidConfiguration) return } @@ -155,13 +155,13 @@ private extension PacketTunnelProvider { try await contextActor.start() self.finishContextStart(contextActor, error: nil) } catch { - SDLLogger.fatal("[PacketTunnelProvider] context start failed: \(error)") + SDLLogger.fatal("[PacketTunnelProvider] context start failed: \(error)", category: .app) self.finishContextStart(contextActor, error: error) } } case .starting, .running, .stopping: - SDLLogger.fatal("[PacketTunnelProvider] startContext rejected: invalid runtime state \(self.runtimeState)") + SDLLogger.fatal("[PacketTunnelProvider] startContext rejected: invalid runtime state \(self.runtimeState)", category: .app) self.runtimeLock.unlock() completionHandler(TunnelError.invalidContext) } @@ -173,7 +173,7 @@ private extension PacketTunnelProvider { let startCompletionHandler = self.startCompletionHandler guard contextActor != nil else { - SDLLogger.fatal("[PacketTunnelProvider] stopContext requested while context is nil, clearRuntimeConfiguration: \(clearRuntimeConfiguration)") + SDLLogger.fatal("[PacketTunnelProvider] stopContext requested while context is nil, clearRuntimeConfiguration: \(clearRuntimeConfiguration)", category: .app) self.runtimeState = .idle self.startCompletionHandler = nil if clearRuntimeConfiguration { @@ -195,7 +195,7 @@ private extension PacketTunnelProvider { } self.runtimeLock.unlock() - SDLLogger.fatal("[PacketTunnelProvider] stopContext will stop current context, clearRuntimeConfiguration: \(clearRuntimeConfiguration)") + SDLLogger.fatal("[PacketTunnelProvider] stopContext will stop current context, clearRuntimeConfiguration: \(clearRuntimeConfiguration)", category: .app) startCompletionHandler?(TunnelError.invalidContext) Task { diff --git a/Tun/Policy/PolicyRuleStore.swift b/Tun/Policy/PolicyRuleStore.swift index 4bac670..2d539c5 100644 --- a/Tun/Policy/PolicyRuleStore.swift +++ b/Tun/Policy/PolicyRuleStore.swift @@ -88,7 +88,7 @@ actor PolicyRuleStore { ruleMap: PolicyRuleMap(version: version, ruleMap: ruleMap), expiresAt: now + self.policyTTL ) - SDLLogger.log("[PolicyRuleStore] apply policy response, srcIdentityID: \(id), version: \(version), rulesCount: \(ruleMap.reduce(0) { $0 + $1.value.count })", for: .debug) + SDLLogger.log("[PolicyRuleStore] apply policy response, srcIdentityID: \(id), version: \(version), rulesCount: \(ruleMap.reduce(0) { $0 + $1.value.count })", category: .policy) // 发布新的快照信息 let snapshot = compileSnapshot() diff --git a/Tun/Policy/PolicyRuntime.swift b/Tun/Policy/PolicyRuntime.swift index 7765854..9e4e3a3 100644 --- a/Tun/Policy/PolicyRuntime.swift +++ b/Tun/Policy/PolicyRuntime.swift @@ -26,17 +26,17 @@ struct PolicyRuntime: @unchecked Sendable { func evaluateInbound(srcIdentityID: UInt32, ipPacket: IPPacketView) -> InboundDecision { if self.isExposedService(ipPacket: ipPacket) { - SDLLogger.log("[PolicyRuntime] acl hit, src_identify_id: \(srcIdentityID), check rule: \(debugInfo(ipPacket: ipPacket))") + SDLLogger.log("[PolicyRuntime] acl hit, src_identify_id: \(srcIdentityID), check rule: \(debugInfo(ipPacket: ipPacket))", category: .policy) return self.evaluateByRule(srcIdentityID: srcIdentityID, ipPacket: ipPacket) } if self.isAllowedBySession(ipPacket: ipPacket) { - SDLLogger.log("[PolicyRuntime] session hit, src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))") + SDLLogger.log("[PolicyRuntime] session hit, src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))", category: .policy) return .allow } if case .icmp = ipPacket.transportPacket { - SDLLogger.log("[PolicyRuntime] icmp hit, src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))") + SDLLogger.log("[PolicyRuntime] icmp hit, src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))", category: .policy) return .allow } @@ -49,7 +49,7 @@ struct PolicyRuntime: @unchecked Sendable { } let isAllowed = self.isAllowedByRule(ruleMap: ruleMap, ipPacket: ipPacket) - SDLLogger.log("[PolicyRuntime] rule hit: \(isAllowed), src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))") + SDLLogger.log("[PolicyRuntime] rule hit: \(isAllowed), src_identify_id: \(srcIdentityID), allow: \(debugInfo(ipPacket: ipPacket))", category: .policy) return isAllowed ? .allow : .deny } diff --git a/Tun/Policy/PolicyService.swift b/Tun/Policy/PolicyService.swift index 1b10c4b..c740ea6 100644 --- a/Tun/Policy/PolicyService.swift +++ b/Tun/Policy/PolicyService.swift @@ -68,7 +68,7 @@ actor PolicyService { func applyPolicyResponse(_ policyResponse: SDLPolicyResponse) async { guard policyResponse.dstIdentityID == self.identityId else { - SDLLogger.log("[PolicyService] ignore policy response, dstIdentityID mismatch: \(policyResponse.dstIdentityID), expected: \(self.identityId)", for: .debug) + SDLLogger.log("[PolicyService] ignore policy response, dstIdentityID mismatch: \(policyResponse.dstIdentityID), expected: \(self.identityId)", category: .policy) return } @@ -79,19 +79,19 @@ actor PolicyService { var request = SDLExposedServiceRequest() self.latestExposedServiceRequestVersion = Self.nextVersion(after: self.latestExposedServiceRequestVersion) request.version = self.latestExposedServiceRequestVersion - SDLLogger.log("[PolicyService] make exposed service request, version: \(request.version)", for: .debug) + SDLLogger.log("[PolicyService] make exposed service request, version: \(request.version)", category: .policy) return try? request.serializedData() } func applyExposedServiceResponse(_ response: SDLExposedServiceResponse) -> SDLConfiguration.ACL? { guard response.version == self.latestExposedServiceRequestVersion else { - SDLLogger.log("[PolicyService] ignore exposed service response, version: \(response.version), latest request version: \(self.latestExposedServiceRequestVersion)", for: .debug) + SDLLogger.log("[PolicyService] ignore exposed service response, version: \(response.version), latest request version: \(self.latestExposedServiceRequestVersion)", category: .policy) return nil } let acl = SDLConfiguration.ACL(response: response) self.aclPublisher.publish(ExposedServiceSnapshot(acl: acl)) - SDLLogger.log("[PolicyService] apply exposed service response, version: \(response.version), tcp: \(acl.tcpPorts.count), udp: \(acl.udpPorts.count)", for: .debug) + SDLLogger.log("[PolicyService] apply exposed service response, version: \(response.version), tcp: \(acl.tcpPorts.count), udp: \(acl.udpPorts.count)", category: .policy) return acl } @@ -101,7 +101,7 @@ actor PolicyService { } deinit { - SDLLogger.log("[PolicyService] deinit") + SDLLogger.log("[PolicyService] deinit", category: .policy) } private static func nextVersion(after version: UInt32) -> UInt32 { diff --git a/Tun/Session/SDLPuncherActor.swift b/Tun/Session/SDLPuncherActor.swift index b2ce6cf..433cec1 100644 --- a/Tun/Session/SDLPuncherActor.swift +++ b/Tun/Session/SDLPuncherActor.swift @@ -70,7 +70,7 @@ actor SDLPuncherActor { queryInfo.dstMac = request.dstMac guard let queryData = try? queryInfo.serializedData() else { - SDLLogger.log("[SDLPuncherActor] failed to encode queryInfo", for: .debug) + SDLLogger.log("[SDLPuncherActor] failed to encode queryInfo", category: .session) return nil } @@ -100,7 +100,7 @@ actor SDLPuncherActor { register.dstMac = entry.request.dstMac guard let registerData = try? register.serializedData() else { - SDLLogger.log("[SDLPuncherActor] failed to encode register", for: .debug) + SDLLogger.log("[SDLPuncherActor] failed to encode register", category: .session) return [] } diff --git a/Tun/Super/SDLSuperClient.swift b/Tun/Super/SDLSuperClient.swift index 816758e..1c5dace 100644 --- a/Tun/Super/SDLSuperClient.swift +++ b/Tun/Super/SDLSuperClient.swift @@ -54,7 +54,7 @@ final class SDLSuperClient: @unchecked Sendable { self.connection = NWConnection(host: Self.makeEndpointHost(address: serverEndpoint.ip), port: .init(rawValue: port)!, using: params) - SDLLogger.log("[SDLSuperClient] start with tls protocol", for: .debug) + SDLLogger.log("[SDLSuperClient] start with tls protocol", category: .super) } func run() async throws { @@ -92,7 +92,7 @@ final class SDLSuperClient: @unchecked Sendable { let connection = self.connection return AsyncThrowingStream(bufferingPolicy: .bufferingNewest(16)) { continuation in connection.stateUpdateHandler = { [weak self] state in - SDLLogger.log("[SDLSuperClient] new state: \(state)", for: .debug) + SDLLogger.log("[SDLSuperClient] new state: \(state)", category: .super) switch state { case .failed(let error): let wrappedError = SDLSuperError.connectionFailed(error) @@ -149,7 +149,7 @@ final class SDLSuperClient: @unchecked Sendable { connection.send(content: packet, completion: .contentProcessed { [weak self] error in if let error { - SDLLogger.log("[SDLSuperClient] send data get error: \(error)", for: .debug) + SDLLogger.log("[SDLSuperClient] send data get error: \(error)", category: .super) self?.finishMessageStream(throwing: SDLSuperError.writeFailed(error)) } }) @@ -193,7 +193,7 @@ final class SDLSuperClient: @unchecked Sendable { connection.cancel() self.finishMessageStream() - SDLLogger.log("[SDLSuperClient] stopped") + SDLLogger.log("[SDLSuperClient] stopped", category: .super) } private func markStarted() -> Bool { @@ -244,7 +244,7 @@ final class SDLSuperClient: @unchecked Sendable { } deinit { - SDLLogger.log("[SDLSuperClient] deinit") + SDLLogger.log("[SDLSuperClient] deinit", category: .super) } } diff --git a/Tun/Super/SDLSuperCodec.swift b/Tun/Super/SDLSuperCodec.swift index 13c4661..296ce96 100644 --- a/Tun/Super/SDLSuperCodec.swift +++ b/Tun/Super/SDLSuperCodec.swift @@ -62,14 +62,14 @@ enum SDLSuperCodec { case .event: guard let bytes = buffer.readBytes(length: buffer.readableBytes), let event = try? SDLEvent(serializedBytes: bytes) else { - SDLLogger.log("SDLSuperClient decode Event Error", for: .debug) + SDLLogger.log("SDLSuperClient decode Event Error", category: .super) return nil } return .event(event) case .pong: return .pong default: - SDLLogger.log("SDLSuperClient decode miss type: \(type)", for: .debug) + SDLLogger.log("SDLSuperClient decode miss type: \(type)", category: .super) return nil } diff --git a/Tun/Super/SDLSuperSession.swift b/Tun/Super/SDLSuperSession.swift index bb3444f..034333b 100644 --- a/Tun/Super/SDLSuperSession.swift +++ b/Tun/Super/SDLSuperSession.swift @@ -34,7 +34,7 @@ final class SDLSuperSession: @unchecked Sendable { } private func runLoops() async throws { - SDLLogger.log("[SDLSuperSession] start super client: \(self.serverEndpoint.ip)") + SDLLogger.log("[SDLSuperSession] start super client: \(self.serverEndpoint.ip)", category: .super) try await withThrowingTaskGroup(of: Void.self) { group in defer { diff --git a/Tun/Super/SDLSuperTLSVerifier.swift b/Tun/Super/SDLSuperTLSVerifier.swift index ff9542d..9b5b2a5 100644 --- a/Tun/Super/SDLSuperTLSVerifier.swift +++ b/Tun/Super/SDLSuperTLSVerifier.swift @@ -24,7 +24,7 @@ enum SDLSuperTLSVerifier { // --- Step 1: 系统验证 --- var error: CFError? guard SecTrustEvaluateWithError(secTrust, &error) else { - SDLLogger.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")", for: .debug) + SDLLogger.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")", category: .super) return false } @@ -33,21 +33,21 @@ enum SDLSuperTLSVerifier { SecTrustSetPolicies(secTrust, policy) guard SecTrustEvaluateWithError(secTrust, &error) else { - SDLLogger.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")", for: .debug) + SDLLogger.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")", category: .super) return false } // --- Step 3: 获取叶子证书 --- guard let chain = SecTrustCopyCertificateChain(secTrust) as? [SecCertificate], let leafCertificate = chain.first else { - SDLLogger.log("❌ 无法获取证书链或叶子证书", for: .debug) + SDLLogger.log("❌ 无法获取证书链或叶子证书", category: .super) return false } // --- Step 4: 提取公钥 --- guard let publicKey = SecCertificateCopyKey(leafCertificate), let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, nil) as Data? else { - SDLLogger.log("❌ 无法提取公钥", for: .debug) + SDLLogger.log("❌ 无法提取公钥", category: .super) return false } @@ -56,10 +56,10 @@ enum SDLSuperTLSVerifier { let hashBase64 = Data(hash).base64EncodedString().lowercased() if pinnedPublicKeyHashes.contains(hashBase64) { - SDLLogger.log("✅ 公钥校验通过", for: .debug) + SDLLogger.log("✅ 公钥校验通过", category: .super) return true } else { - SDLLogger.log("⚠️ 公钥不匹配! 收到: \(hashBase64), config hashes: \(pinnedPublicKeyHashes)", for: .debug) + SDLLogger.log("⚠️ 公钥不匹配! 收到: \(hashBase64), config hashes: \(pinnedPublicKeyHashes)", category: .super) return false } } diff --git a/Tun/UDPHole/SDLUDPHole.swift b/Tun/UDPHole/SDLUDPHole.swift index d80a8c4..61cb46e 100644 --- a/Tun/UDPHole/SDLUDPHole.swift +++ b/Tun/UDPHole/SDLUDPHole.swift @@ -74,10 +74,10 @@ final class SDLUDPHole: ChannelInboundHandler { if let message = try SDLHoleMessage.decode(buffer: &buffer) { self.messageContinuation.yield(SDLHoleDatagram(remoteAddress: remoteAddress, message: message)) } else { - SDLLogger.log("[SDLUDPHole] decode message, get null", for: .debug) + SDLLogger.log("[SDLUDPHole] decode message, get null", category: .udpHole) } } catch let err { - SDLLogger.log("[SDLUDPHole] decode message, get error: \(err)", for: .debug) + SDLLogger.log("[SDLUDPHole] decode message, get error: \(err)", category: .udpHole) self.messageContinuation.finish(throwing: err) } } @@ -126,10 +126,10 @@ final class SDLUDPHole: ChannelInboundHandler { try? channel?.close().wait() try? self.group.syncShutdownGracefully() - SDLLogger.log("[SDLUDPHole] stopped", for: .debug) + SDLLogger.log("[SDLUDPHole] stopped", category: .udpHole) } deinit { - SDLLogger.log("[SDLUDPHole] deinit", for: .debug) + SDLLogger.log("[SDLUDPHole] deinit", category: .udpHole) } } diff --git a/Tun/UDPHole/SDLUDPHoleSession.swift b/Tun/UDPHole/SDLUDPHoleSession.swift index 3bc3dce..4048a25 100644 --- a/Tun/UDPHole/SDLUDPHoleSession.swift +++ b/Tun/UDPHole/SDLUDPHoleSession.swift @@ -31,7 +31,7 @@ actor SDLUDPHoleSession { self.udpHole = udpHole self.localAddress = localAddress - SDLLogger.log("[SDLUDPHoleSession] udpHole started, on address: \(localAddress)") + SDLLogger.log("[SDLUDPHoleSession] udpHole started, on address: \(localAddress)", category: .udpHole) await self.onEvent(.ready(localAddress)) try await withThrowingTaskGroup(of: Void.self) { group in @@ -62,12 +62,12 @@ actor SDLUDPHoleSession { func send(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async { guard case .v4 = remoteAddress else { - SDLLogger.log("[SDLUDPHoleSession] unsupported socket family: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLUDPHoleSession] unsupported socket family: \(remoteAddress)", category: .udpHole) return } guard let udpHole else { - SDLLogger.log("[SDLUDPHoleSession] udpHole is nil for remoteAddress: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLUDPHoleSession] udpHole is nil for remoteAddress: \(remoteAddress)", category: .udpHole) return } diff --git a/Tun/UDPHoleCommon/SDLHoleMessage.swift b/Tun/UDPHoleCommon/SDLHoleMessage.swift index 0007111..4daa465 100644 --- a/Tun/UDPHoleCommon/SDLHoleMessage.swift +++ b/Tun/UDPHoleCommon/SDLHoleMessage.swift @@ -63,7 +63,7 @@ extension SDLHoleMessage { } return .control(.stunReply(stunReply)) default: - SDLLogger.log("[SDLUDPHole] decode miss type: \(type)", for: .debug) + SDLLogger.log("[SDLUDPHole] decode miss type: \(type)", category: .udpHole) return nil } diff --git a/Tun/UDPHoleV6/SDLUDPHoleV6.swift b/Tun/UDPHoleV6/SDLUDPHoleV6.swift index a82d747..61fb9c9 100644 --- a/Tun/UDPHoleV6/SDLUDPHoleV6.swift +++ b/Tun/UDPHoleV6/SDLUDPHoleV6.swift @@ -67,27 +67,27 @@ final class SDLUDPHoleV6: ChannelInboundHandler { let remoteAddress = envelope.remoteAddress if let rawBytes = buffer.getBytes(at: buffer.readerIndex, length: buffer.readableBytes) { - SDLLogger.log("[SDLUDPHoleV6] get raw bytes: \(rawBytes.count), from: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] get raw bytes: \(rawBytes.count), from: \(remoteAddress)", category: .udpHole) } do { if let message = try SDLHoleMessage.decode(buffer: &buffer) { self.messageContinuation.yield((remoteAddress, message)) } else { - SDLLogger.log("[SDLUDPHoleV6] decode message, get null", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] decode message, get null", category: .udpHole) } } catch let err { - SDLLogger.log("[SDLUDPHoleV6] decode message, get error: \(err)", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] decode message, get error: \(err)", category: .udpHole) } } func channelInactive(context: ChannelHandlerContext) { - SDLLogger.log("[SDLUDPHoleV6] channelInactive", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] channelInactive", category: .udpHole) self.eventContinuation.yield(.closed) } func errorCaught(context: ChannelHandlerContext, error: any Error) { - SDLLogger.log("[SDLUDPHoleV6] channel error: \(error)", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] channel error: \(error)", category: .udpHole) context.close(promise: nil) self.eventContinuation.yield(.errorCaught) } @@ -114,7 +114,7 @@ final class SDLUDPHoleV6: ChannelInboundHandler { } self.isStopped = true - SDLLogger.log("[SDLUDPHoleV6] stop", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] stop", category: .udpHole) self.messageContinuation.finish() self.eventContinuation.finish() @@ -127,7 +127,7 @@ final class SDLUDPHoleV6: ChannelInboundHandler { } deinit { - SDLLogger.log("[SDLUDPHoleV6] deinit", for: .debug) + SDLLogger.log("[SDLUDPHoleV6] deinit", category: .udpHole) } } diff --git a/Tun/UDPHoleV6/SDLUDPHoleV6Session.swift b/Tun/UDPHoleV6/SDLUDPHoleV6Session.swift index 5b9987a..84c36f2 100644 --- a/Tun/UDPHoleV6/SDLUDPHoleV6Session.swift +++ b/Tun/UDPHoleV6/SDLUDPHoleV6Session.swift @@ -21,9 +21,9 @@ actor SDLUDPHoleV6Session { self.udpHoleV6 = udpHoleV6 if let localAddress { - SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 started, on address: \(localAddress)") + SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 started, on address: \(localAddress)", category: .udpHole) } else { - SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 started, no local address") + SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 started, no local address", category: .udpHole) } try await withThrowingTaskGroup(of: Void.self) { group in @@ -51,7 +51,7 @@ actor SDLUDPHoleV6Session { try Task.checkCancellation() switch event { case .ready: - SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 ready") + SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 ready", category: .udpHole) case .closed, .errorCaught: throw SDLContextError.udpHoleClosed } @@ -70,12 +70,12 @@ actor SDLUDPHoleV6Session { func send(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) { guard case .v6 = remoteAddress else { - SDLLogger.log("[SDLUDPHoleV6Session] unsupported socket family: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLUDPHoleV6Session] unsupported socket family: \(remoteAddress)", category: .udpHole) return } guard let udpHoleV6 else { - SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 is nil for remoteAddress: \(remoteAddress)", for: .debug) + SDLLogger.log("[SDLUDPHoleV6Session] udpHoleV6 is nil for remoteAddress: \(remoteAddress)", category: .udpHole) return }