diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index 4f538573..86951ccc 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -505,19 +505,24 @@ namespace Shadowsocks.Controller case 1: // IPv4 address, 4 bytes dst_addr = new IPAddress(_connetionRecvBuffer.Skip(1).Take(4).ToArray()).ToString(); dst_port = (_connetionRecvBuffer[5] << 8) + _connetionRecvBuffer[6]; - // Note by wongsyrone: this will be stripped out in Release version - Logging.Debug($"connect to {dst_addr}:{dst_port}"); + if ( controller.GetCurrentConfiguration().isVerboseLogging ) { + Logging.Info( $"connect to {dst_addr}:{dst_port}" ); + } break; case 3: // domain name, length + str int len = _connetionRecvBuffer[1]; dst_addr = System.Text.Encoding.UTF8.GetString(_connetionRecvBuffer, 2, len); dst_port = (_connetionRecvBuffer[len + 2] << 8) + _connetionRecvBuffer[len + 3]; - Logging.Debug($"connect to {dst_addr}:{dst_port}"); + if ( controller.GetCurrentConfiguration().isVerboseLogging ) { + Logging.Info( $"connect to {dst_addr}:{dst_port}" ); + } break; case 4: // IPv6 address, 16 bytes dst_addr = new IPAddress(_connetionRecvBuffer.Skip(1).Take(16).ToArray()).ToString(); dst_port = (_connetionRecvBuffer[17] << 8) + _connetionRecvBuffer[18]; - Logging.Debug($"connect to [{dst_addr}]:{dst_port}"); + if ( controller.GetCurrentConfiguration().isVerboseLogging ) { + Logging.Info( $"connect to [{dst_addr}]:{dst_port}" ); + } break; } int bytesToSend; diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index 8023f51f..6bf8de24 100755 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -68,6 +68,7 @@ namespace Shadowsocks.Controller public event EventHandler EnableStatusChanged; public event EventHandler EnableGlobalChanged; public event EventHandler ShareOverLANStatusChanged; + public event EventHandler VerboseLoggingStatusChanged; public event EventHandler TrafficChanged; // when user clicked Edit PAC, and PAC file has already created @@ -212,6 +213,15 @@ namespace Shadowsocks.Controller } } + public void ToggleVerboseLogging(bool enabled) + { + _config.isVerboseLogging = enabled; + SaveConfig(_config); + if ( VerboseLoggingStatusChanged != null ) { + VerboseLoggingStatusChanged(this, new EventArgs()); + } + } + public void SelectServerIndex(int index) { _config.index = index; diff --git a/shadowsocks-csharp/Data/cn.txt b/shadowsocks-csharp/Data/cn.txt index 30f51f20..33c9eb2c 100644 --- a/shadowsocks-csharp/Data/cn.txt +++ b/shadowsocks-csharp/Data/cn.txt @@ -22,6 +22,7 @@ Show QRCode...=显示二维码... Scan QRCode from Screen...=扫描屏幕上的二维码... Availability Statistics=统计可用性 Show Logs...=显示日志... +Verbose Logging=详细记录日志 Updates...=更新... Check for Updates...=检查更新 Check for Updates at Startup=启动时检查更新 diff --git a/shadowsocks-csharp/Model/Configuration.cs b/shadowsocks-csharp/Model/Configuration.cs index 10a42124..91c95871 100755 --- a/shadowsocks-csharp/Model/Configuration.cs +++ b/shadowsocks-csharp/Model/Configuration.cs @@ -24,6 +24,7 @@ namespace Shadowsocks.Model public bool useOnlinePac; public bool availabilityStatistics; public bool autoCheckUpdate; + public bool isVerboseLogging; public LogViewerConfig logViewer; private static string CONFIG_FILE = "gui-config.json"; diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 3a5e5367..42f0fa48 100755 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -48,6 +48,7 @@ namespace Shadowsocks.View private MenuItem editGFWUserRuleItem; private MenuItem editOnlinePACItem; private MenuItem autoCheckUpdatesToggleItem; + private MenuItem VerboseLoggingToggleItem; private ConfigForm configForm; private List logForms = new List(); private bool logFormsVisible = false; @@ -64,6 +65,7 @@ namespace Shadowsocks.View controller.PACFileReadyToOpen += controller_FileReadyToOpen; controller.UserRuleFileReadyToOpen += controller_FileReadyToOpen; controller.ShareOverLANStatusChanged += controller_ShareOverLANStatusChanged; + controller.VerboseLoggingStatusChanged += controller_VerboseLoggingStatusChanged; controller.EnableGlobalChanged += controller_EnableGlobalChanged; controller.Errored += controller_Errored; controller.UpdatePACFromGFWListCompleted += controller_UpdatePACFromGFWListCompleted; @@ -265,6 +267,7 @@ namespace Shadowsocks.View this.ShareOverLANItem = CreateMenuItem("Allow Clients from LAN", new EventHandler(this.ShareOverLANItem_Click)), new MenuItem("-"), CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)), + this.VerboseLoggingToggleItem = CreateMenuItem( "Verbose Logging", new EventHandler(this.VerboseLoggingToggleItem_Click) ), CreateMenuGroup("Updates...", new MenuItem[] { CreateMenuItem("Check for Updates...", new EventHandler(this.checkUpdatesItem_Click)), new MenuItem("-"), @@ -293,6 +296,10 @@ namespace Shadowsocks.View ShareOverLANItem.Checked = controller.GetConfigurationCopy().shareOverLan; } + void controller_VerboseLoggingStatusChanged(object sender, EventArgs e) { + VerboseLoggingToggleItem.Checked = controller.GetConfigurationCopy().isVerboseLogging; + } + void controller_EnableGlobalChanged(object sender, EventArgs e) { globalModeItem.Checked = controller.GetConfigurationCopy().global; @@ -369,6 +376,7 @@ namespace Shadowsocks.View globalModeItem.Checked = config.global; PACModeItem.Checked = !config.global; ShareOverLANItem.Checked = config.shareOverLan; + VerboseLoggingToggleItem.Checked = config.isVerboseLogging; AutoStartupItem.Checked = AutoStartup.Check(); onlinePACItem.Checked = onlinePACItem.Enabled && config.useOnlinePac; localPACItem.Checked = !onlinePACItem.Checked; @@ -576,6 +584,11 @@ namespace Shadowsocks.View logForms.Add(f); } + private void VerboseLoggingToggleItem_Click( object sender, EventArgs e ) { + VerboseLoggingToggleItem.Checked = ! VerboseLoggingToggleItem.Checked; + controller.ToggleVerboseLogging( VerboseLoggingToggleItem.Checked ); + } + private void StatisticsConfigItem_Click(object sender, EventArgs e) { StatisticsStrategyConfigurationForm form = new StatisticsStrategyConfigurationForm(controller);