diff --git a/ClashX/AppDelegate.swift b/ClashX/AppDelegate.swift index 509e93b..18c6d0d 100644 --- a/ClashX/AppDelegate.swift +++ b/ClashX/AppDelegate.swift @@ -29,6 +29,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var separatorLineTop: NSMenuItem! @IBOutlet weak var sepatatorLineEndProxySelect: NSMenuItem! + @IBOutlet weak var logLevelMenuItem: NSMenuItem! + var disposeBag = DisposeBag() let ssQueue = DispatchQueue(label: "com.w2fzu.ssqueue", attributes: .concurrent) var statusItemView:StatusItemView! @@ -46,7 +48,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { self.syncConfig() } setupData() - + updateLoggingLevel() } @@ -102,6 +104,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { case .global:self.proxyModeGlobalMenuItem.state = .on case .rule:self.proxyModeRuleMenuItem.state = .on } + self.proxyModeMenuItem.title = "Proxy Mode (\(config!.mode.rawValue))" @@ -181,6 +184,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } + func updateLoggingLevel() { + for item in self.logLevelMenuItem.submenu?.items ?? [] { + item.state = item.title.lowercased() == ConfigManager.selectLoggingApiLevel.rawValue ? .on : .off + } + } + func startProxy() { ssQueue.async { @@ -274,6 +283,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } + @IBAction func actionSetLogLevel(_ sender: NSMenuItem) { + let level = ClashLogLevel(rawValue: sender.title.lowercased()) ?? .unknow + ConfigManager.selectLoggingApiLevel = level + updateLoggingLevel() + resetStreamApi() + } + @IBAction func actionImportBunchJsonFile(_ sender: NSMenuItem) { ConfigFileFactory.importConfigFile() } diff --git a/ClashX/Base.lproj/Main.storyboard b/ClashX/Base.lproj/Main.storyboard index 3922cd6..6154e04 100644 --- a/ClashX/Base.lproj/Main.storyboard +++ b/ClashX/Base.lproj/Main.storyboard @@ -17,6 +17,7 @@ + @@ -86,7 +87,7 @@ - + @@ -123,15 +124,27 @@ + + + + + + + + + + + + diff --git a/ClashX/Basic/Logger.swift b/ClashX/Basic/Logger.swift index 295d973..43316af 100644 --- a/ClashX/Basic/Logger.swift +++ b/ClashX/Basic/Logger.swift @@ -36,7 +36,7 @@ class Logger { } static func log(msg:String ,level:ClashLogLevel = .unknow) { - shared.logToFile(msg: msg, level: level) + shared.logToFile(msg: "[\(level.rawValue)] \(msg)", level: level) } func logFilePath() -> String { diff --git a/ClashX/General/ApiRequest.swift b/ClashX/General/ApiRequest.swift index 1fa0418..d52b780 100644 --- a/ClashX/General/ApiRequest.swift +++ b/ClashX/General/ApiRequest.swift @@ -73,7 +73,7 @@ class ApiRequest{ logReq = alamoFireManager - .request(ConfigManager.apiUrl + "/logs") + .request(ConfigManager.apiUrl + "/logs?Level=\(ConfigManager.selectLoggingApiLevel.rawValue)") .stream {(data) in retry = 0 if let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String:String] { @@ -111,7 +111,6 @@ class ApiRequest{ } } - static func requestProxyGroupList(completeHandler:@escaping (([String:[String:Any]])->())){ request(ConfigManager.apiUrl + "/proxies", method: .get).responseJSON{ res in diff --git a/ClashX/Managers/ConfigManager.swift b/ClashX/Managers/ConfigManager.swift index e298eb4..cd45690 100644 --- a/ClashX/Managers/ConfigManager.swift +++ b/ClashX/Managers/ConfigManager.swift @@ -71,6 +71,15 @@ class ConfigManager { } } + static var selectLoggingApiLevel:ClashLogLevel { + get{ + return ClashLogLevel(rawValue: UserDefaults.standard.string(forKey: "selectLoggingApiLevel") ?? "") ?? .info + } + set { + UserDefaults.standard.set(newValue.rawValue, forKey: "selectLoggingApiLevel") + } + } + func refreshApiPort(){ if let ini = parseConfig("\(NSHomeDirectory())/.config/clash/config.ini"),