import Foundation /// 日志等级 public enum LogLevel: Int { case verbose = 0 case debug case info case warn case error } @MainActor public class LogManager { /// 单例 public static let shared = LogManager() private init() {} /// 日志输出 /// - Parameters: /// - level: 日志等级 /// - message: 日志内容 /// - onlyRelease: 是否仅在 Release 环境输出(已修复逻辑) public func log(_ level: LogLevel, _ message: @autoclosure () -> String, onlyRelease: Bool = false) { #if DEBUG // DEBUG 环境:如果 onlyRelease 为 true,则不输出;否则正常输出 if !onlyRelease { print("[\(level)] \(message())") } #else // RELEASE 环境:如果 onlyRelease 为 true,则输出;否则不输出 if onlyRelease { print("[\(level)] \(message())") } #endif } /// 仅在 DEBUG 环境输出的日志(推荐使用) /// - Parameters: /// - level: 日志等级 /// - message: 日志内容 public func debugLog(_ level: LogLevel, _ message: @autoclosure () -> String) { #if DEBUG print("[\(level)] \(message())") #endif } } // MARK: - 原有快捷方法(保持向后兼容) @MainActor public func logVerbose(_ message: @autoclosure () -> String, onlyRelease: Bool = false) { LogManager.shared.log(.verbose, message(), onlyRelease: onlyRelease) } @MainActor public func logDebug(_ message: @autoclosure () -> String, onlyRelease: Bool = false) { LogManager.shared.log(.debug, message(), onlyRelease: onlyRelease) } @MainActor public func logInfo(_ message: @autoclosure () -> String, onlyRelease: Bool = false) { LogManager.shared.log(.info, message(), onlyRelease: onlyRelease) } @MainActor public func logWarn(_ message: @autoclosure () -> String, onlyRelease: Bool = false) { LogManager.shared.log(.warn, message(), onlyRelease: onlyRelease) } @MainActor public func logError(_ message: @autoclosure () -> String, onlyRelease: Bool = false) { LogManager.shared.log(.error, message(), onlyRelease: onlyRelease) } // MARK: - 新的DEBUG专用快捷方法(推荐使用) public func debugVerbose(_ message: @autoclosure () -> String) async { let msg = message() await MainActor.run { LogManager.shared.debugLog(.verbose, msg) } } public func debugLog(_ message: @autoclosure () -> String) async { let msg = message() await MainActor.run { LogManager.shared.debugLog(.debug, msg) } } public func debugInfo(_ message: @autoclosure () -> String) async { let msg = message() await MainActor.run { LogManager.shared.debugLog(.info, msg) } } public func debugWarn(_ message: @autoclosure () -> String) async { let msg = message() await MainActor.run { LogManager.shared.debugLog(.warn, msg) } } public func debugError(_ message: @autoclosure () -> String) async { let msg = message() await MainActor.run { LogManager.shared.debugLog(.error, msg) } } // fire-and-forget 同步重载(方法名加 Sync 后缀) public func debugVerboseSync(_ message: @autoclosure () -> String) { let msg = message() Task { await debugVerbose(msg) } } public func debugLogSync(_ message: @autoclosure () -> String) { let msg = message() Task { await debugLog(msg) } } public func debugInfoSync(_ message: @autoclosure () -> String) { let msg = message() Task { await debugInfo(msg) } } public func debugWarnSync(_ message: @autoclosure () -> String) { let msg = message() Task { await debugWarn(msg) } } public func debugErrorSync(_ message: @autoclosure () -> String) { let msg = message() Task { await debugError(msg) } }