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