From d2c911da51b1ab2bc7806a9da04eb360f117b3b9 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Fri, 14 Aug 2020 11:02:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E6=8E=A7=E5=88=B6=E5=99=A8?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=86=99=E5=85=A5=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Netch/Controllers/Interface/Instance.cs | 49 ++++++++----------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/Netch/Controllers/Interface/Instance.cs b/Netch/Controllers/Interface/Instance.cs index 6a226952..8c049509 100644 --- a/Netch/Controllers/Interface/Instance.cs +++ b/Netch/Controllers/Interface/Instance.cs @@ -44,7 +44,7 @@ namespace Netch.Controllers /// private string _logPath; - private FileStream _logFileStream; + private readonly StringBuilder _logBuffer = new StringBuilder(); /// /// 程序输出的编码, @@ -117,7 +117,6 @@ namespace Netch.Controllers _logPath ??= Path.Combine(Global.NetchDir, $"logging\\{Name}.log"); if (File.Exists(_logPath)) File.Delete(_logPath); - _logFileStream = new FileStream(_logPath, FileMode.Create, FileAccess.Write); Instance.OutputDataReceived += OnOutputDataReceived; Instance.ErrorDataReceived += OnOutputDataReceived; @@ -133,8 +132,8 @@ namespace Netch.Controllers // 启动日志重定向 Instance.BeginOutputReadLine(); Instance.BeginErrorReadLine(); - _writeStreamTimer.Elapsed += SaveStreamTimerEvent; - _writeStreamTimer.Enabled = true; + SaveBufferTimer.Elapsed += SaveBufferTimerEvent; + SaveBufferTimer.Enabled = true; // 等待启动 for (var i = 0; i < 1000; i++) { @@ -161,16 +160,13 @@ namespace Netch.Controllers } } - private static System.Timers.Timer _writeStreamTimer = new System.Timers.Timer(300) {AutoReset = true}; + private static readonly System.Timers.Timer SaveBufferTimer = new System.Timers.Timer(300) {AutoReset = true}; private void OnExited(object sender, EventArgs e) { if (RedirectStd) { - _writeStreamTimer.Enabled = false; - Thread.Sleep(100); // 等待 Write() 写入流 - _logFileStream.Close(); - _logFileStream = null; + SaveBufferTimer.Enabled = false; } State = State.Stopped; @@ -187,9 +183,9 @@ namespace Netch.Controllers if (e.Data == null) return; - var info = Encoding.GetEncoding(InstanceOutputEncoding).GetBytes(e.Data + Global.EOF); - Task.Run(() => Write(info)); + var info = Encoding.GetEncoding(InstanceOutputEncoding).GetBytes(e.Data); var str = Encoding.UTF8.GetString(info); + Write(str); // 检查启动 if (State == State.Starting) { @@ -205,42 +201,27 @@ namespace Netch.Controllers /// /// /// - private async void SaveStreamTimerEvent(object sender, EventArgs e) + private void SaveBufferTimerEvent(object sender, EventArgs e) { - if (_logFileStream == null) return; try { - await _logFileStream.FlushAsync(); + File.AppendAllText(_logPath, _logBuffer.ToString()); + _logBuffer.Clear(); } - catch + catch (Exception exception) { - // ignored + Logging.Warning($"写入 {Name} 日志错误:\n" + exception.Message); } } - private readonly object _fileLocker = new object(); - /// - /// 写入日志文件流 + /// 写入日志文件缓冲 /// /// /// 转码后的字符串 - private void Write(byte[] info) + private void Write(string info) { - if (info == null) - return; - - try - { - lock (_fileLocker) - { - _logFileStream.Write(info, 0, info.Length); - } - } - catch (Exception e) - { - Logging.Warning($"写入 {Name} 日志错误:\n" + e.Message); - } + _logBuffer.Append(info + Global.EOF); } } } \ No newline at end of file