using System; using System.Text; namespace ZTools; public enum LogLevel { Error, Warning, Info, Debug, } public static class Log { private static StringBuilder _logBuilder; private static StringBuilder _tmp; internal static StringBuilder LogBuilder => _logBuilder; public delegate void LogDelegate(string msg); public static LogDelegate LogCallback; static Log() { _logBuilder = new StringBuilder(); _tmp = new StringBuilder(); } public static void Debug(object message) { Write(message, LogLevel.Debug); } public static void Info(object message) { Write(message, LogLevel.Info); } public static void Error(object message) { Write(message, LogLevel.Error); } public static void Warning(object message) { Write(message, LogLevel.Warning); } static void Write(object message, LogLevel level = LogLevel.Debug) { // var bytes = Encoding.UTF8.GetBytes(message.ToString() ?? string.Empty); // var s = Encoding.UTF8.GetString(bytes); _tmp.Clear(); _tmp.Append($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {level}: {message}"); var format = _tmp.ToString(); _logBuilder.AppendLine(format); Console.WriteLine(format); LogCallback?.Invoke(format); } }