fix loggers

This commit is contained in:
anlicheng 2026-04-10 18:23:12 +08:00
parent 68e163f0f6
commit 055dad7010
10 changed files with 88 additions and 104 deletions

View File

@ -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)

View File

@ -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)
}
// dnsudppayload
else {
//
let dnsPayload = Data(packet.data[payloadOffset..<packet.data.count])
SDLLogger.shared.log("[SDLContext] get local dns request: \(name)")
SDLLogger.log("[SDLContext] get local dns request: \(name)")
let tracker = DNSLocalClient.DNSTracker(transactionID: dnsMessage.transactionID,
clientIP: packet.header.source,
@ -740,11 +740,11 @@ actor SDLContextActor {
if SDLUtil.inSameNetwork(ip: dstIp, compareIp: networkAddr.ip, maskLen: networkAddr.maskLen) {
// arpmac
if let dstMac = await self.arpServer.query(ip: dstIp) {
SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", level: .debug)
SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))")
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
}
else {
SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug)
SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast")
// // arp广
// let arpReqeust = ARPPacket.arpRequest(senderIP: networkAddr.ip, senderMAC: networkAddr.mac, targetIP: dstIp)
// await self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
@ -756,7 +756,7 @@ actor SDLContextActor {
//
else if let exitNode = config.exitNode {
let exitNodeIp: UInt32 = exitNode.exitNodeIp
SDLLogger.shared.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())", level: .debug)
SDLLogger.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())")
// arpmac
if let dstMac = await self.arpServer.query(ip: exitNodeIp) {
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
@ -794,14 +794,14 @@ actor SDLContextActor {
else {
// session
if let session = self.sessionManager.getSession(toAddress: dstMac) {
SDLLogger.shared.log("[SDLContext] send packet by session: \(session)", level: .debug)
SDLLogger.log("[SDLContext] send packet by session: \(session)")
udpHole.send(type: .data, data: data, remoteAddress: session.natAddress)
self.flowTracer.inc(num: data.count, type: .p2p)
}
else {
// super_node
udpHole.send(type: .data, data: data, remoteAddress: self.config.stunSocketAddress)
SDLLogger.shared.log("[SDLContext] send packet by super: \(self.config.stunSocketAddress)", level: .debug)
SDLLogger.log("[SDLContext] send packet by super: \(self.config.stunSocketAddress)")
//
self.flowTracer.inc(num: data.count, type: .forward)
@ -860,7 +860,7 @@ actor SDLContextActor {
}
// nat
self.natType = await self.proberActor.probeNatType(using: udpHole)
SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
SDLLogger.log("[SDLContext] nat_type is: \(natType)")
}
private func spawnLoop(_ body: @escaping () async throws -> Void) -> Task<Void, Never> {

View File

@ -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

View File

@ -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
}
}

View File

@ -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)
}
}

View File

@ -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)
}
})
}

View File

@ -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()

View File

@ -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)
}
}
}

View File

@ -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() {

View File

@ -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
}