diff --git a/DaggerFramework/Source/Utils/Logger.cs b/DaggerFramework/Source/Utils/Logger.cs index 57b7c91..0a50aaf 100644 --- a/DaggerFramework/Source/Utils/Logger.cs +++ b/DaggerFramework/Source/Utils/Logger.cs @@ -1,67 +1,97 @@ +#pragma warning disable CA2211 + +using System.Runtime.CompilerServices; + namespace DaggerFramework.Utils { public class Logger { - public static Action? OnLog; + public static Action? OnLog; + public static string LogPath = "Logs/"; + + /// + /// Specifies the logging level. In release builds, the log level is Error. In debug, the log level is Echo. + /// + public static LogLevel LogLevel = LogLevel.Error; + public Logger(string className) { _className = className; + +#if DEBUG + LogLevel = LogLevel.Echo; +#endif } - public void Echo(object what) + public void Echo(string what) { - LogConsole((string)what, LogType.Echo); - OnLog?.Invoke((string)what, LogType.Echo); + if (LogLevel < LogLevel.Echo) return; + + string message = string.Format(EchoFormat, DateFormat, what); + + LogConsole(what, LogLevel.Echo); + OnLog?.Invoke(what, LogLevel.Echo); } - public void Info(object what) + public void Info(string what, [CallerMemberName] string method = "") { - LogType logType = LogType.Info; - string message = $"({DateFormat}) [{logType.ToString().ToUpper()}/{_className}] {what}"; + if (LogLevel < LogLevel.Info) return; + + LogLevel logType = LogLevel.Info; + string message = string.Format(LogFormat, DateFormat, logType.ToString(), _className, method, what); + LogConsole(message, logType); OnLog?.Invoke(message, logType); } - public void Warn(object what) + public void Warn(string what, [CallerMemberName] string method = "") { - LogType logType = LogType.Warn; - string message = $"({DateFormat}) [{logType.ToString().ToUpper()}/{_className}] {what}"; + if (LogLevel < LogLevel.Warn) return; + + LogLevel logType = LogLevel.Warn; + string message = string.Format(LogFormat, DateFormat, logType.ToString(), _className, method, what); + LogConsole(message, logType); OnLog?.Invoke(message, logType); } - public void Error(object what) + public void Error(string what, [CallerMemberName] string method = "") { - LogType logType = LogType.Error; - string message = $"({DateFormat}) [{logType.ToString().ToUpper()}/{_className}] {what}"; + if (LogLevel < LogLevel.Error) return; + + LogLevel logType = LogLevel.Error; + string message = string.Format(LogFormat, DateFormat, logType.ToString(), _className, method, what); + LogConsole(message, logType); OnLog?.Invoke(message, logType); } - private static string DateFormat => $"{DateTime.Now:t}"; + private static string DateFormat => $"{DateTime.Now:HH:mm:ffff}"; + private static string LogFormat => "({0}) [{1}/{2}/{3}] {4}"; + private static string EchoFormat => "({0}) {1}"; - private static void LogConsole(string what, LogType logType) + private static void LogConsole(string what, LogLevel logType) { - Console.ForegroundColor = GetConsoleColorForLog(logType); + Console.ForegroundColor = ConsoleColorForLog(logType); Console.WriteLine(what); Console.ForegroundColor = ConsoleColor.White; } - private static ConsoleColor GetConsoleColorForLog(LogType logType) + private static ConsoleColor ConsoleColorForLog(LogLevel logType) { ConsoleColor color = ConsoleColor.White; switch (logType) { - case LogType.Info: + case LogLevel.Info: color = ConsoleColor.Cyan; break; - case LogType.Warn: + case LogLevel.Warn: color = ConsoleColor.Yellow; break; - case LogType.Error: + case LogLevel.Error: color = ConsoleColor.Red; break; } @@ -72,11 +102,11 @@ namespace DaggerFramework.Utils private readonly string _className; } - public enum LogType + public enum LogLevel { - Echo, - Info, + Error, Warn, - Error + Info, + Echo, } } \ No newline at end of file diff --git a/TestGame/TestPlayer.cs b/TestGame/TestPlayer.cs index 8e24769..95b7b82 100644 --- a/TestGame/TestPlayer.cs +++ b/TestGame/TestPlayer.cs @@ -8,7 +8,6 @@ public class TestPlayer : RectangleShape2d { base.OnStart(); Color = Color.Cyan; - _logger.Echo("OnStart"); _camera = new Camera2d() { @@ -29,10 +28,6 @@ public class TestPlayer : RectangleShape2d Position += velocity * (float)dt; _camera.Position = MathUtils.LerpVector2(_camera.Position, Position, dt * 5f); - - // var mousePos = Input.GetMousePosition(); - // Position = MathUtils.LerpVector2(Position, mousePos, dt * 5f); - // Rotation += (float)dt * 100f; } private Logger _logger = new(nameof(TestPlayer));