using System; using System.Text; using ColdMint.scripts.utils; using Godot; namespace ColdMint.scripts.debug; public static class LogCat { /// /// Information log level /// 信息日志等级 /// public const int InfoLogLevel = 0; /// /// Warning level /// 警告等级 /// public const int WarningLogLevel = 1; /// /// Error log level /// 错误日志等级 /// public const int ErrorLogLevel = 2; /// ///Disable all logs ///禁用所有日志 /// public const int DisableAllLogLevel = int.MaxValue; private static int _minLogLevel = InfoLogLevel; /// /// Set the minimum log level /// 设置最小日志等级 /// /// ///Set a value for it so that LogCat only prints logs with a level higher than the set value. ///为其设置一个值,使LogCat仅打印等级高于设定值的日志。 /// public static int MinLogLevel { get => _minLogLevel; set => _minLogLevel = value; } private static readonly StringBuilder StringBuilder = new StringBuilder(); private static StringBuilder HandleMessage(int level, string message) { StringBuilder.Clear(); switch (level) { case InfoLogLevel: StringBuilder.Append("INFO"); break; case WarningLogLevel: StringBuilder.Append("WARNING"); break; case ErrorLogLevel: StringBuilder.Append("ERROR"); break; default: StringBuilder.Append("INFO"); break; } StringBuilder.Append(DateTime.Now.ToString(" yyyy-M-d HH:mm:ss : ")); var key = $"log_{message}"; var translationResult = TranslationServerUtils.Translate(key); StringBuilder.Append(translationResult == key ? message : translationResult); return StringBuilder; } /// /// Print log /// 打印日志 /// /// ///message ///消息 /// This message supports localized output, assuming there is already a translation key, Hello = 你好, passing hello will output 你好. /// 这个消息支持本地化输出,假设已存在翻译key,Hello = 你好,传入Hello则会输出你好。 /// public static void Log(string message) { if (_minLogLevel > InfoLogLevel) { return; } GD.Print(HandleMessage(InfoLogLevel, message)); } /// /// Print error log /// 打印错误日志 /// /// ///message ///消息 /// This message supports localized output, assuming there is already a translation key, Hello = 你好, passing hello will output 你好. /// 这个消息支持本地化输出,假设已存在翻译key,Hello = 你好,传入Hello则会输出你好。 /// public static void LogError(string message) { if (_minLogLevel > ErrorLogLevel) { return; } GD.PrintErr(HandleMessage(ErrorLogLevel, message)); } public static void LogWarning(string message) { if (_minLogLevel > WarningLogLevel) { return; } GD.Print(HandleMessage(WarningLogLevel, message)); } public static void LogErrorWithFormat(string message, params object?[] args) { if (_minLogLevel > ErrorLogLevel) { return; } GD.PrintErr(string.Format(HandleMessage(ErrorLogLevel, message).ToString(), args)); } public static void LogWithFormat(string message, params object?[] args) { if (_minLogLevel > InfoLogLevel) { return; } GD.Print(string.Format(HandleMessage(InfoLogLevel, message).ToString(), args)); } public static void LogWarningWithFormat(string message, params object?[] args) { if (_minLogLevel > InfoLogLevel) { return; } GD.Print(string.Format(HandleMessage(WarningLogLevel, message).ToString(), args)); } /// /// This method is called when an exception is caught /// 当捕获异常后调用此方法 /// /// public static void WhenCaughtException(Exception e) { //Log an exception here or send it to the server. //请在这里记录异常或将异常发送至服务器。 GD.PrintErr(HandleMessage(ErrorLogLevel, e.Message).Append('\n').Append(e.StackTrace)); } }