37 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Diagnostics;
 | 
						|
 | 
						|
namespace Engine.Core.Debug;
 | 
						|
 | 
						|
public static class LoggerExtensions
 | 
						|
{
 | 
						|
    public static void Log<T>(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<T>(this ILogger logger, T caller, string message, bool force = false) => Log(logger, caller, message, ILogger.Level.Info, force);
 | 
						|
 | 
						|
    public static void LogError<T>(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<T>(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<T>(this ILogger logger, T caller, StackTrace? stackTrace = null, bool force = false)
 | 
						|
    {
 | 
						|
        Log(logger, caller, $"{nameof(StackTrace)}:{Environment.NewLine}{stackTrace ?? new()}", ILogger.Level.Trace, force);
 | 
						|
    }
 | 
						|
}
 |