From 0a207e2970456fbd70b0ac0c11f010a5ed20a5e5 Mon Sep 17 00:00:00 2001 From: neru Date: Thu, 18 Jun 2026 15:26:47 -0300 Subject: [PATCH] feat: add logger --- src/dumper/log.cs | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/dumper/log.cs diff --git a/src/dumper/log.cs b/src/dumper/log.cs new file mode 100644 index 0000000..e85ee53 --- /dev/null +++ b/src/dumper/log.cs @@ -0,0 +1,63 @@ +public enum LogLevel +{ + Verbose, + Info, + Warning, + Error +} + +public class Logger +{ + private readonly string _name; + private static readonly object _consoleLock = new object(); + + public LogLevel MinimumLevel { get; set; } = LogLevel.Verbose; + + public Logger(string name) + { + _name = name; + } + + public void Verbose(string message, params object[] args) => Log(LogLevel.Verbose, ConsoleColor.DarkGray, message, args); + public void Info(string message, params object[] args) => Log(LogLevel.Info, ConsoleColor.White, message, args); + public void Warning(string message, params object[] args) => Log(LogLevel.Warning, ConsoleColor.Yellow, message, args); + public void Error(string message, params object[] args) => Log(LogLevel.Error, ConsoleColor.Red, message, args); + + private void Log(LogLevel level, ConsoleColor messageColor, string template, object[] args) + { + if (level < MinimumLevel) return; + + string finalMessage = template; + if (args != null && args.Length > 0) + { + try + { + finalMessage = string.Format(template, args); + } + catch (FormatException) + { + finalMessage = template + " [Format Error]"; + } + } + + string timestamp = DateTime.Now.ToString("HH:mm:ss.fff"); + string levelStr = level.ToString().ToUpper().PadRight(7); + + lock (_consoleLock) + { + Console.ForegroundColor = ConsoleColor.DarkGray; + Console.Write($"[{timestamp}] "); + + Console.ForegroundColor = messageColor; + Console.Write($"[{levelStr}] "); + + Console.ForegroundColor = ConsoleColor.Cyan; + Console.Write($"[{_name}] "); + + Console.ForegroundColor = messageColor; + Console.WriteLine(finalMessage); + + Console.ResetColor(); + } + } +}