GFramework/GFramework.Core/logging/AbstractLogger.cs
GeWuYou 8913f2fb2c refactor(architecture): 移除泛型参数并删除拖拽组件
- 移除 AbstractArchitecture<T> 中的泛型参数 T
- 移除 AbstractGodotModule<T> 中的泛型参数 T
- 删除 AbstractDragDrop2DComponentBase 组件类
- 删除 AbstractDragDropArea2DComponent 组件类
- 修改 InstallGodotModule 方法的泛型约束
- 更新系统中获取系统实例的方式
- 调整命名空间和依赖引用关系
- 添加新的日志抽象基类 AbstractLogger
- 重构控制台日志记录器继承抽象基类
2025-12-25 13:05:38 +08:00

351 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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