175 lines
5.0 KiB
C#
175 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace XiaoZhiSharp.Utils
|
|
{
|
|
// 消息类型枚举
|
|
public enum MessageType
|
|
{
|
|
Send,
|
|
Recv,
|
|
Info,
|
|
Warn,
|
|
Erro
|
|
}
|
|
|
|
// 日志控制台类
|
|
public class LogConsole
|
|
{
|
|
public static bool IsWrite {get;set;} = true;
|
|
// 记录消息并换行的方法
|
|
public static void WriteLine(MessageType type, string message)
|
|
{
|
|
WriteMessage(type, message, true);
|
|
}
|
|
|
|
public static void WriteLine(string message)
|
|
{
|
|
WriteMessage(MessageType.Info, message, true);
|
|
}
|
|
|
|
// 记录消息但不换行的方法
|
|
public static void Write(MessageType type, string message)
|
|
{
|
|
WriteMessage(type, message, false);
|
|
}
|
|
public static void Write(string message)
|
|
{
|
|
WriteMessage(MessageType.Info, message, false);
|
|
}
|
|
|
|
// 私有方法,用于处理消息的输出,封装公共逻辑
|
|
private static void WriteMessage(MessageType type, string message, bool isNewLine)
|
|
{
|
|
if (!Global.IsDebug)
|
|
return;
|
|
|
|
if (!IsWrite)
|
|
return;
|
|
|
|
ConsoleColor originalColor = Console.ForegroundColor;
|
|
|
|
try
|
|
{
|
|
// 根据消息类型设置控制台前景色
|
|
SetConsoleColor(type);
|
|
|
|
// 格式化消息
|
|
string formattedMessage = FormatMessage(type, Regex.Unescape(message));
|
|
|
|
// 根据是否换行选择输出方式
|
|
if (isNewLine)
|
|
{
|
|
Console.WriteLine(formattedMessage);
|
|
}
|
|
else
|
|
{
|
|
Console.Write(formattedMessage);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
// 恢复控制台原始颜色
|
|
Console.ForegroundColor = originalColor;
|
|
}
|
|
}
|
|
|
|
// 私有方法,根据消息类型设置控制台前景色
|
|
private static void SetConsoleColor(MessageType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case MessageType.Send:
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
break;
|
|
case MessageType.Recv:
|
|
Console.ForegroundColor = ConsoleColor.Blue;
|
|
break;
|
|
case MessageType.Info:
|
|
Console.ForegroundColor = ConsoleColor.White;
|
|
break;
|
|
case MessageType.Warn:
|
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
break;
|
|
case MessageType.Erro:
|
|
Console.ForegroundColor = ConsoleColor.Red;
|
|
break;
|
|
default:
|
|
// 若消息类型未匹配,使用默认的灰色
|
|
Console.ForegroundColor = ConsoleColor.Gray;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 私有方法,格式化消息,添加时间戳和消息类型
|
|
private static string FormatMessage(MessageType type, string message)
|
|
{
|
|
return $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.ffff}] [{type}] {message}";
|
|
}
|
|
|
|
// 快捷方法:发送消息并换行
|
|
public static void SendLine(string message)
|
|
{
|
|
WriteLine(MessageType.Send, message);
|
|
}
|
|
|
|
// 快捷方法:发送消息不换行
|
|
public static void Send(string message)
|
|
{
|
|
Write(MessageType.Send, message);
|
|
}
|
|
|
|
// 快捷方法:接收消息并换行
|
|
public static void ReceiveLine(string message)
|
|
{
|
|
WriteLine(MessageType.Recv, message);
|
|
}
|
|
|
|
// 快捷方法:接收消息不换行
|
|
public static void Receive(string message)
|
|
{
|
|
Write(MessageType.Recv, message);
|
|
}
|
|
|
|
// 快捷方法:记录信息并换行
|
|
public static void InfoLine(string message)
|
|
{
|
|
WriteLine(MessageType.Info, message);
|
|
}
|
|
|
|
// 快捷方法:记录信息不换行
|
|
public static void Info(string message)
|
|
{
|
|
Write(MessageType.Info, message);
|
|
}
|
|
|
|
// 快捷方法:记录警告并换行
|
|
public static void WarningLine(string message)
|
|
{
|
|
WriteLine(MessageType.Warn, message);
|
|
}
|
|
|
|
// 快捷方法:记录警告不换行
|
|
public static void Warning(string message)
|
|
{
|
|
Write(MessageType.Warn, message);
|
|
}
|
|
|
|
// 快捷方法:记录错误并换行
|
|
public static void ErrorLine(string message)
|
|
{
|
|
WriteLine(MessageType.Erro, message);
|
|
}
|
|
|
|
// 快捷方法:记录错误不换行
|
|
public static void Error(string message)
|
|
{
|
|
Write(MessageType.Erro, message);
|
|
}
|
|
}
|
|
}
|