using GFramework.Core.Abstractions.logging; namespace GFramework.Core.logging; /// /// 日志抽象基类,封装日志级别判断、格式化与异常处理逻辑。 /// 平台日志器只需实现 Write 方法即可。 /// public abstract class AbstractLogger( string? name = null, LogLevel minLevel = LogLevel.Info) : ILogger { /// /// 根日志记录器的名称常量 /// public const string RootLoggerName = "ROOT"; private readonly string _name = name ?? RootLoggerName; #region Metadata /// /// 获取日志器的名称 /// /// 日志器名称 public string Name() { return _name; } #endregion /// /// 平台输出入口,由具体实现负责真正的日志写入。 /// /// 日志级别 /// 日志消息 /// 异常对象(可为null) protected abstract void Write(LogLevel level, string message, Exception? exception); #region Level Checks /// /// 判断指定日志级别是否启用 /// /// 要检查的日志级别 /// 如果指定级别大于等于最小级别则返回true,否则返回false protected bool IsEnabled(LogLevel level) { return level >= minLevel; } /// /// 检查Trace级别日志是否启用 /// /// 如果Trace级别启用返回true,否则返回false public bool IsTraceEnabled() { return IsEnabled(LogLevel.Trace); } /// /// 检查Debug级别日志是否启用 /// /// 如果Debug级别启用返回true,否则返回false public bool IsDebugEnabled() { return IsEnabled(LogLevel.Debug); } /// /// 检查Info级别日志是否启用 /// /// 如果Info级别启用返回true,否则返回false public bool IsInfoEnabled() { return IsEnabled(LogLevel.Info); } /// /// 检查Warning级别日志是否启用 /// /// 如果Warning级别启用返回true,否则返回false public bool IsWarnEnabled() { return IsEnabled(LogLevel.Warning); } /// /// 检查Error级别日志是否启用 /// /// 如果Error级别启用返回true,否则返回false public bool IsErrorEnabled() { return IsEnabled(LogLevel.Error); } /// /// 检查Fatal级别日志是否启用 /// /// 如果Fatal级别启用返回true,否则返回false public bool IsFatalEnabled() { return IsEnabled(LogLevel.Fatal); } /// /// 检查指定日志级别是否启用 /// /// 要检查的日志级别 /// 如果指定级别启用返回true,否则返回false /// 当传入的日志级别不被识别时抛出 public bool IsEnabledForLevel(LogLevel level) { // 根据不同的日志级别调用对应的检查方法 return level switch { LogLevel.Trace => IsTraceEnabled(), LogLevel.Debug => IsDebugEnabled(), LogLevel.Info => IsInfoEnabled(), LogLevel.Warning => IsWarnEnabled(), LogLevel.Error => IsErrorEnabled(), LogLevel.Fatal => IsFatalEnabled(), _ => throw new ArgumentException($"Level [{level}] not recognized.", nameof(level)) }; } #endregion #region Trace /// /// 记录Trace级别日志 /// /// 日志消息 public void Trace(string msg) { Log(LogLevel.Trace, msg); } /// /// 记录Trace级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Trace(string format, object arg) { Log(LogLevel.Trace, format, arg); } /// /// 记录Trace级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Trace(string format, object arg1, object arg2) { Log(LogLevel.Trace, format, arg1, arg2); } /// /// 记录Trace级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Trace(string format, params object[] arguments) { Log(LogLevel.Trace, format, arguments); } /// /// 记录Trace级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Trace(string msg, Exception t) { Log(LogLevel.Trace, msg, t); } #endregion #region Debug /// /// 记录Debug级别日志 /// /// 日志消息 public void Debug(string msg) { Log(LogLevel.Debug, msg); } /// /// 记录Debug级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Debug(string format, object arg) { Log(LogLevel.Debug, format, arg); } /// /// 记录Debug级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Debug(string format, object arg1, object arg2) { Log(LogLevel.Debug, format, arg1, arg2); } /// /// 记录Debug级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Debug(string format, params object[] arguments) { Log(LogLevel.Debug, format, arguments); } /// /// 记录Debug级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Debug(string msg, Exception t) { Log(LogLevel.Debug, msg, t); } #endregion #region Info /// /// 记录Info级别日志 /// /// 日志消息 public void Info(string msg) { Log(LogLevel.Info, msg); } /// /// 记录Info级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Info(string format, object arg) { Log(LogLevel.Info, format, arg); } /// /// 记录Info级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Info(string format, object arg1, object arg2) { Log(LogLevel.Info, format, arg1, arg2); } /// /// 记录Info级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Info(string format, params object[] arguments) { Log(LogLevel.Info, format, arguments); } /// /// 记录Info级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Info(string msg, Exception t) { Log(LogLevel.Info, msg, t); } #endregion #region Warn /// /// 记录Warning级别日志 /// /// 日志消息 public void Warn(string msg) { Log(LogLevel.Warning, msg); } /// /// 记录Warning级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Warn(string format, object arg) { Log(LogLevel.Warning, format, arg); } /// /// 记录Warning级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Warn(string format, object arg1, object arg2) { Log(LogLevel.Warning, format, arg1, arg2); } /// /// 记录Warning级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Warn(string format, params object[] arguments) { Log(LogLevel.Warning, format, arguments); } /// /// 记录Warning级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Warn(string msg, Exception t) { Log(LogLevel.Warning, msg, t); } #endregion #region Error /// /// 记录Error级别日志 /// /// 日志消息 public void Error(string msg) { Log(LogLevel.Error, msg); } /// /// 记录Error级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Error(string format, object arg) { Log(LogLevel.Error, format, arg); } /// /// 记录Error级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Error(string format, object arg1, object arg2) { Log(LogLevel.Error, format, arg1, arg2); } /// /// 记录Error级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Error(string format, params object[] arguments) { Log(LogLevel.Error, format, arguments); } /// /// 记录Error级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Error(string msg, Exception t) { Log(LogLevel.Error, msg, t); } #endregion #region Fatal /// /// 记录Fatal级别日志 /// /// 日志消息 public void Fatal(string msg) { Log(LogLevel.Fatal, msg); } /// /// 记录Fatal级别日志(带格式化参数) /// /// 格式化字符串 /// 格式化参数 public void Fatal(string format, object arg) { Log(LogLevel.Fatal, format, arg); } /// /// 记录Fatal级别日志(带两个格式化参数) /// /// 格式化字符串 /// 第一个格式化参数 /// 第二个格式化参数 public void Fatal(string format, object arg1, object arg2) { Log(LogLevel.Fatal, format, arg1, arg2); } /// /// 记录Fatal级别日志(带多个格式化参数) /// /// 格式化字符串 /// 格式化参数数组 public void Fatal(string format, params object[] arguments) { Log(LogLevel.Fatal, format, arguments); } /// /// 记录Fatal级别日志(带异常信息) /// /// 日志消息 /// 异常对象 public void Fatal(string msg, Exception t) { Log(LogLevel.Fatal, msg, t); } #endregion #region Core Pipeline /// /// 核心日志记录方法(无参数) /// /// 日志级别 /// 日志消息 private void Log(LogLevel level, string message) { if (!IsEnabled(level)) return; Write(level, message, null); } /// /// 核心日志记录方法(带参数格式化) /// /// 日志级别 /// 格式化字符串 /// 格式化参数数组 private void Log(LogLevel level, string format, params object[] args) { if (!IsEnabled(level)) return; Write(level, string.Format(format, args), null); } /// /// 核心日志记录方法(带异常) /// /// 日志级别 /// 日志消息 /// 异常对象 private void Log(LogLevel level, string message, Exception exception) { if (!IsEnabled(level)) return; Write(level, message, exception); } #endregion }