Feature: Add log level selection

This commit is contained in:
yicheng 2018-08-12 11:29:51 +08:00
parent 894cb72e23
commit dbf52fc7da
5 changed files with 42 additions and 5 deletions

View File

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

View File

@ -17,6 +17,7 @@
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="ClashX" customModuleProvider="target">
<connections>
<outlet property="autoStartMenuItem" destination="B1J-XB-BiZ" id="xaS-h5-qd0"/>
<outlet property="logLevelMenuItem" destination="3Da-fL-Mzr" id="ZCW-Il-fOZ"/>
<outlet property="proxyModeDirectMenuItem" destination="Np6-Pm-Lo3" id="DER-K7-DNW"/>
<outlet property="proxyModeGlobalMenuItem" destination="yiM-U4-MNg" id="M7s-kl-aPh"/>
<outlet property="proxyModeMenuItem" destination="jGT-1M-xJu" id="3Xj-xK-MJj"/>
@ -86,7 +87,7 @@
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Config" id="tck-zU-JKQ">
<items>
<menuItem title="Generate Config" id="a4G-S3-jxT">
<menuItem title="Generate Config" state="on" id="a4G-S3-jxT">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Generate Config" id="IeJ-1Q-UaF">
<items>
@ -123,15 +124,27 @@
<items>
<menuItem title="ERROR" id="0iu-lB-eZN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="KEd-c4-cB8"/>
</connections>
</menuItem>
<menuItem title="WARNING" id="ko2-Ir-DxA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="V2s-Xc-8lq"/>
</connections>
</menuItem>
<menuItem title="INFO" id="d8V-h0-0zF">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="jeM-b7-3h6"/>
</connections>
</menuItem>
<menuItem title="DEBUG" id="XIR-Go-fWA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="wcc-7Y-8Ke"/>
</connections>
</menuItem>
</items>
</menu>

View File

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

View File

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

View File

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