feat: added loggers
This commit is contained in:
parent
c7aafd85bc
commit
f43ab36742
8
Engine.Core/Debug/ConsoleLogger.cs
Normal file
8
Engine.Core/Debug/ConsoleLogger.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public class ConsoleLogger : LoggerBase
|
||||||
|
{
|
||||||
|
protected override void Write(string message) => Console.WriteLine(message);
|
||||||
|
}
|
20
Engine.Core/Debug/FileLogger.cs
Normal file
20
Engine.Core/Debug/FileLogger.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public class FileLogger : LoggerBase
|
||||||
|
{
|
||||||
|
public readonly string FilePath;
|
||||||
|
|
||||||
|
public FileLogger(string filePath)
|
||||||
|
{
|
||||||
|
FilePath = filePath;
|
||||||
|
File.Open(filePath, FileMode.Create).Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Write(string message)
|
||||||
|
{
|
||||||
|
File.AppendAllTextAsync(FilePath, $"{message}{Environment.NewLine}");
|
||||||
|
}
|
||||||
|
}
|
15
Engine.Core/Debug/ILogger.cs
Normal file
15
Engine.Core/Debug/ILogger.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public interface ILogger
|
||||||
|
{
|
||||||
|
Level FilterLevel { get; set; }
|
||||||
|
|
||||||
|
void Log(string message, Level level = Level.Info, bool force = false);
|
||||||
|
|
||||||
|
enum Level
|
||||||
|
{
|
||||||
|
Info,
|
||||||
|
Warning,
|
||||||
|
Error,
|
||||||
|
};
|
||||||
|
}
|
20
Engine.Core/Debug/LoggerBase.cs
Normal file
20
Engine.Core/Debug/LoggerBase.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public abstract class LoggerBase : ILogger
|
||||||
|
{
|
||||||
|
public ILogger.Level FilterLevel { get; set; } = ILogger.Level.Info;
|
||||||
|
|
||||||
|
public void Log(string message, ILogger.Level level = ILogger.Level.Info, bool force = false)
|
||||||
|
{
|
||||||
|
if (!force && level < FilterLevel)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string timestamp = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss tt");
|
||||||
|
|
||||||
|
Write($"[{timestamp}] [{level}] \t{message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void Write(string message);
|
||||||
|
}
|
28
Engine.Core/Debug/LoggerExtensions.cs
Normal file
28
Engine.Core/Debug/LoggerExtensions.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace Syntriax.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);
|
||||||
|
Log(logger, caller, $"{nameof(StackTrace)}:{Environment.NewLine}{new StackTrace()}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogException<T>(this ILogger logger, T caller, Exception exception, bool force = false)
|
||||||
|
{
|
||||||
|
Log(logger, caller, $"Message: {exception.Message}", ILogger.Level.Error, force);
|
||||||
|
Log(logger, caller, $"InnerException: {exception.InnerException}", ILogger.Level.Error, force);
|
||||||
|
Log(logger, caller, $"{nameof(StackTrace)}:{Environment.NewLine}{exception.StackTrace}");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user