namespace GFramework.Core.logging; /// /// 日志抽象基类,封装日志级别判断、格式化与异常处理逻辑。 /// 平台日志器只需实现 Write 方法即可。 /// public abstract class AbstractLogger( string? name = null, LogLevel minLevel = LogLevel.Info) : ILogger { private readonly string _name = name ?? ILogger.RootLoggerName; #region Metadata /// /// 获取日志器的名称 /// /// 日志器名称 public string Name() => _name; #endregion #region Level Checks /// /// 判断指定日志级别是否启用 /// /// 要检查的日志级别 /// 如果指定级别大于等于最小级别则返回true,否则返回false protected bool IsEnabled(LogLevel level) => level >= minLevel; /// /// 检查Trace级别日志是否启用 /// /// 如果Trace级别启用返回true,否则返回false public bool IsTraceEnabled() => IsEnabled(LogLevel.Trace); /// /// 检查Debug级别日志是否启用 /// /// 如果Debug级别启用返回true,否则返回false public bool IsDebugEnabled() => IsEnabled(LogLevel.Debug); /// /// 检查Info级别日志是否启用 /// /// 如果Info级别启用返回true,否则返回false public bool IsInfoEnabled() => IsEnabled(LogLevel.Info); /// /// 检查Warning级别日志是否启用 /// /// 如果Warning级别启用返回true,否则返回false public bool IsWarnEnabled() => IsEnabled(LogLevel.Warning); /// /// 检查Error级别日志是否启用 /// /// 如果Error级别启用返回true,否则返回false public bool IsErrorEnabled() => IsEnabled(LogLevel.Error); /// /// 检查Fatal级别日志是否启用 /// /// 如果Fatal级别启用返回true,否则返回false public bool IsFatalEnabled() => IsEnabled(LogLevel.Fatal); #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 /// /// 平台输出入口,由具体实现负责真正的日志写入。 /// /// 日志级别 /// 日志消息 /// 异常对象(可为null) protected abstract void Write(LogLevel level, string message, Exception? exception); }