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(); + } + } +}