using System; using System.Diagnostics; namespace Syntriax.Engine.Core.Debug; public static class LoggerExtensions { public static void Log(this ILogger logger, T caller, string message, ILogger.Level level = ILogger.Level.Info, bool force = false) { string body = $"{caller?.GetType().Name ?? typeof(T).Name}: {message}"; logger.Log(body, level, force); } public static void LogWarning(this ILogger logger, T caller, string message, bool force = false) => Log(logger, caller, message, ILogger.Level.Info, force); public static void LogError(this ILogger logger, T caller, string message, bool force = false) { Log(logger, caller, message, ILogger.Level.Error, force); LogTrace(logger, caller, new StackTrace(), force); } public static void LogException(this ILogger logger, T caller, Exception exception, bool force = false) { Log(logger, caller, $"Exception of type {exception.GetType().Name} occured", ILogger.Level.Error, force); Log(logger, caller, $"Message: {exception.Message}", ILogger.Level.Error, force); Log(logger, caller, $"InnerException: {exception.InnerException}", ILogger.Level.Error, force); // Not using LogTrace because exception.StackTrace is a type of string Log(logger, caller, $"{nameof(StackTrace)}:{Environment.NewLine}{exception.StackTrace}", ILogger.Level.Trace); } public static void LogTrace(this ILogger logger, T caller, StackTrace stackTrace, bool force = false) { Log(logger, caller, $"{nameof(StackTrace)}:{Environment.NewLine}{stackTrace ?? new()}", ILogger.Level.Trace, force); } }