public class ConsoleEx
{
private const int FiFO_Length = 512;
private static int FIFO_Count = 0;
private static int Index_In = 0;
private static int Index_Out = 0;
private static string FilePath = string.Empty;
private static readonly Thread LogProcess = new(Thread_LogRunning);
private static readonly string[] StringFIFO = new string[FiFO_Length];
public static void Initialize()
{
FilePath = $"./\\Log\\log_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log";
if (Directory.Exists("./\\Log") == false)
Directory.CreateDirectory("./\\Log");
File.WriteAllText(FilePath, "");
LogProcess.IsBackground = true;
LogProcess.Start();
}
public static void WriteLine(string value)
{
if (FIFO_Count == FiFO_Length - 1)
{
Console.WriteLine("Log FIFO 满");
return;
}
StringFIFO[Index_In++] = value;
FIFO_Count++;
if (Index_In == FiFO_Length)
Index_In = 0;
}
private static void OutLine(string value)
{
Console.WriteLine(value);
StreamWriter LogWriter = File.AppendText(FilePath);
LogWriter.Write(value);
LogWriter.Write("\r\n");
LogWriter.Close();
}
private static void Thread_LogRunning()
{
while (true)
{
if (FIFO_Count > 0)
{
OutLine(StringFIFO[Index_Out++]);
FIFO_Count--;
if (Index_Out == FiFO_Length)
Index_Out = 0;
}
}
}
}
使用如下
public Form_Mian()
{
InitializeComponent();
ConsoleEx.Initialize();//初始化
ConsoleEx.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} ----> App Start");
}