using GFramework.Core.Abstractions.logging; namespace GFramework.Core.logging; /// /// 控制台日志记录器 /// public sealed class ConsoleLogger( string? name = null, LogLevel minLevel = LogLevel.Info, TextWriter? writer = null, bool useColors = true) : AbstractLogger(name ?? RootLoggerName, minLevel) { private readonly bool _useColors = useColors && writer == Console.Out; private readonly TextWriter _writer = writer ?? Console.Out; /// /// 写入日志消息到控制台 /// /// 日志级别 /// 日志消息 /// 异常信息,可为空 protected override void Write(LogLevel level, string message, Exception? exception) { var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); var levelStr = level.ToString().ToUpper().PadRight(7); var log = $"[{timestamp}] {levelStr} [{Name()}] {message}"; // 添加异常信息到日志 if (exception != null) log += Environment.NewLine + exception; if (_useColors) WriteColored(level, log); else _writer.WriteLine(log); } #region Internal Core /// /// 以指定颜色写入日志消息 /// /// 日志级别 /// 日志消息 private void WriteColored(LogLevel level, string message) { var original = Console.ForegroundColor; try { Console.ForegroundColor = GetColor(level); _writer.WriteLine(message); } finally { Console.ForegroundColor = original; } } /// /// 根据日志级别获取对应的颜色 /// /// 日志级别 /// 控制台颜色 private static ConsoleColor GetColor(LogLevel level) { return level switch { LogLevel.Trace => ConsoleColor.DarkGray, LogLevel.Debug => ConsoleColor.Cyan, LogLevel.Info => ConsoleColor.White, LogLevel.Warning => ConsoleColor.Yellow, LogLevel.Error => ConsoleColor.Red, LogLevel.Fatal => ConsoleColor.Magenta, _ => ConsoleColor.White }; } #endregion }