GeWuYou 23489570bf fix(analyzers): 降低 Core、Cqrs、Godot 与生成器的构建警告
- 清理 GFramework.Core 与 GFramework.Cqrs 中的大量低风险 Meziantou 警告

- 修复 GFramework.Godot 运行时中的 ConfigureAwait、StringComparison 与参数校验告警

- 调整 Core SourceGenerators 中的字符串比较、文件命名与局部长方法问题

- 拆分部分配置与缓存辅助类型文件以消除 file/type mismatch 告警

- 更新 warning reduction 跟踪与执行记录,保留下一批结构性告警的恢复点
2026-04-18 16:47:44 +08:00

86 lines
2.6 KiB
C#

using System;
using System.Globalization;
using System.IO;
using GFramework.Core.Abstractions.Logging;
namespace GFramework.Core.Logging;
/// <summary>
/// 控制台日志记录器
/// </summary>
public sealed class ConsoleLogger(
string? name = null,
LogLevel minLevel = LogLevel.Info,
TextWriter? writer = null,
bool useColors = true) : AbstractLogger(name ?? RootLoggerName, minLevel)
{
// 静态缓存日志级别字符串,避免重复格式化
private static readonly string[] LevelStrings =
[
"TRACE ",
"DEBUG ",
"INFO ",
"WARNING",
"ERROR ",
"FATAL "
];
private readonly bool _useColors = useColors && writer == Console.Out;
private readonly TextWriter _writer = writer ?? Console.Out;
/// <summary>
/// 写入日志消息到控制台
/// </summary>
/// <param name="level">日志级别</param>
/// <param name="message">日志消息</param>
/// <param name="exception">异常信息,可为空</param>
protected override void Write(LogLevel level, string message, Exception? exception)
{
var timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
var levelStr = LevelStrings[(int)level];
var log = $"[{timestamp}] {levelStr} [{Name()}] {message}";
// 添加异常信息到日志
if (exception != null) log += global::System.Environment.NewLine + exception;
if (_useColors)
WriteColored(level, log);
else
_writer.WriteLine(log);
}
#region Internal Core
/// <summary>
/// 以指定颜色写入日志消息(使用 ANSI 转义码)
/// </summary>
/// <param name="level">日志级别</param>
/// <param name="message">日志消息</param>
private void WriteColored(LogLevel level, string message)
{
var colorCode = GetAnsiColorCode(level);
_writer.WriteLine($"\x1b[{colorCode}m{message}\x1b[0m");
}
/// <summary>
/// 根据日志级别获取对应的 ANSI 颜色代码
/// </summary>
/// <param name="level">日志级别</param>
/// <returns>ANSI 颜色代码</returns>
private static string GetAnsiColorCode(LogLevel level)
{
return level switch
{
LogLevel.Trace => "90", // 暗灰色
LogLevel.Debug => "36", // 青色
LogLevel.Info => "37", // 白色
LogLevel.Warning => "33", // 黄色
LogLevel.Error => "31", // 红色
LogLevel.Fatal => "35", // 洋红色
_ => "37"
};
}
#endregion
}