From d8272c36a10cf78e9456b6cf850bdfe6bfe54a66 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Mon, 13 Jun 2022 10:26:26 +0200 Subject: [PATCH] No more static --- Entities/LogEntry.cs | 9 ++ Enums/LogLevel.cs | 14 +++ Events/LogMessageEventArgs.cs | 2 +- Global.cs | 10 ++ Logger.cs | 167 +++++++++++++++++----------------- LoggerObjects.cs | 29 ------ 6 files changed, 118 insertions(+), 113 deletions(-) create mode 100644 Entities/LogEntry.cs create mode 100644 Enums/LogLevel.cs create mode 100644 Global.cs delete mode 100644 LoggerObjects.cs diff --git a/Entities/LogEntry.cs b/Entities/LogEntry.cs new file mode 100644 index 0000000..e041532 --- /dev/null +++ b/Entities/LogEntry.cs @@ -0,0 +1,9 @@ +namespace Xorog.Logger.Entities; + +public class LogEntry +{ + public DateTime TimeOfEvent { get; set; } + public LogLevel LogLevel { get; set; } + public string Message { get; set; } + public Exception? Exception { get; set; } +} \ No newline at end of file diff --git a/Enums/LogLevel.cs b/Enums/LogLevel.cs new file mode 100644 index 0000000..0ff84e1 --- /dev/null +++ b/Enums/LogLevel.cs @@ -0,0 +1,14 @@ +namespace Xorog.Logger.Enums; + +public enum LogLevel +{ + NONE, + FATAL, + ERROR, + WARN, + INFO, + DEBUG, + DEBUG2, + TRACE, + TRACE2 +} \ No newline at end of file diff --git a/Events/LogMessageEventArgs.cs b/Events/LogMessageEventArgs.cs index 15dac8e..866b949 100644 --- a/Events/LogMessageEventArgs.cs +++ b/Events/LogMessageEventArgs.cs @@ -2,6 +2,6 @@ namespace Xorog.Logger; public class LogMessageEventArgs : EventArgs { - public LoggerObjects.LogEntry LogEntry { get; set; } + public LogEntry LogEntry { get; set; } } \ No newline at end of file diff --git a/Global.cs b/Global.cs new file mode 100644 index 0000000..26ca27b --- /dev/null +++ b/Global.cs @@ -0,0 +1,10 @@ +global using Microsoft.Extensions.Logging; +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Text; +global using System.Threading.Tasks; +global using Xorog.Logger.Entities; +global using Xorog.Logger.Enums; +global using LogLevel = Xorog.Logger.Enums.LogLevel; \ No newline at end of file diff --git a/Logger.cs b/Logger.cs index 79a44ad..6a224f8 100644 --- a/Logger.cs +++ b/Logger.cs @@ -1,23 +1,22 @@ -using System.Text; -using System.IO; -using static Xorog.Logger.LoggerObjects; -using Microsoft.Extensions.Logging; - -namespace Xorog.Logger; +namespace Xorog.Logger; public class Logger : ILogger { - private static bool loggerStarted = false; - private static LoggerObjects.LogLevel maxLogLevel = LoggerObjects.LogLevel.DEBUG; + internal Logger() { } - private static string FileName = ""; - private static FileStream OpenedFile { get; set; } + private bool loggerStarted = false; + private LogLevel maxLogLevel = LogLevel.DEBUG; - private readonly static LoggerObjects _loggerObjects = new(); + private string FileName = ""; + private FileStream OpenedFile { get; set; } - private static Task RunningLogger = null; + internal List LogsToPost = new(); + internal List Blacklist = new(); + internal List FileBlackList = new(); - public static event EventHandler LogRaised; + private Task RunningLogger = null; + + public event EventHandler LogRaised; /// @@ -27,19 +26,21 @@ public class Logger : ILogger /// The loglevel that should be displayed in the console, does not affect whats written to file /// Clean up old logs before a datetime /// A bool stating if the logger was started - public static ILogger StartLogger(string filePath = "", LoggerObjects.LogLevel level = LoggerObjects.LogLevel.DEBUG, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) + public static Logger StartLogger(string filePath = "", LogLevel level = LogLevel.DEBUG, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) { - if (loggerStarted) + var handler = new Logger(); + + if (handler.loggerStarted) throw new Exception($"The logger is already started"); if (filePath is not "") { - FileName = filePath; - OpenedFile = File.Open(FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read); + handler.FileName = filePath; + handler.OpenedFile = File.Open(handler.FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read); } - loggerStarted = true; - maxLogLevel = level; + handler.loggerStarted = true; + handler.maxLogLevel = level; if (cleanUpBefore != new DateTime()) { @@ -51,34 +52,34 @@ public class Logger : ILogger if (fi.CreationTimeUtc < cleanUpBefore) { fi.Delete(); - LogDebug($"{fi.Name} deleted"); + handler.LogDebug($"{fi.Name} deleted"); } } catch (Exception ex) { if (!ThrowOnFailedDeletion) - LogError( $"Couldn't delete log file {b}", ex); + handler.LogError( $"Couldn't delete log file {b}", ex); else throw new Exception($"Failed to delete {b}: {ex}"); } } } - RunningLogger = Task.Run(async () => + handler.RunningLogger = Task.Run(async () => { - while (loggerStarted) + while (handler.loggerStarted) { try { - while (_loggerObjects.LogsToPost.Count == 0) + while (handler.LogsToPost.Count == 0) { Thread.Sleep(10); } - for (int i = 0; i < _loggerObjects.LogsToPost.Count; i++) + for (int i = 0; i < handler.LogsToPost.Count; i++) { - var currentLog = _loggerObjects.LogsToPost[0]; - _loggerObjects.LogsToPost.Remove(currentLog); + var currentLog = handler.LogsToPost[0]; + handler.LogsToPost.Remove(currentLog); if (currentLog is null) @@ -96,28 +97,28 @@ public class Logger : ILogger LogLevelColor = currentLog.LogLevel switch { - LoggerObjects.LogLevel.TRACE => ConsoleColor.Gray, - LoggerObjects.LogLevel.DEBUG2 => ConsoleColor.Gray, - LoggerObjects.LogLevel.DEBUG => ConsoleColor.Gray, - LoggerObjects.LogLevel.INFO => ConsoleColor.Green, - LoggerObjects.LogLevel.WARN => ConsoleColor.Yellow, - LoggerObjects.LogLevel.ERROR => ConsoleColor.Red, - LoggerObjects.LogLevel.FATAL => ConsoleColor.Black, + LogLevel.TRACE => ConsoleColor.Gray, + LogLevel.DEBUG2 => ConsoleColor.Gray, + LogLevel.DEBUG => ConsoleColor.Gray, + LogLevel.INFO => ConsoleColor.Green, + LogLevel.WARN => ConsoleColor.Yellow, + LogLevel.ERROR => ConsoleColor.Red, + LogLevel.FATAL => ConsoleColor.Black, _ => ConsoleColor.Gray }; BackgroundColor = currentLog.LogLevel switch { - LoggerObjects.LogLevel.FATAL => ConsoleColor.DarkRed, + LogLevel.FATAL => ConsoleColor.DarkRed, _ => ConsoleColor.Black }; string LogMessage = currentLog.Message; - foreach (var blacklistobject in _loggerObjects.Blacklist) + foreach (var blacklistobject in handler.Blacklist) LogMessage = LogMessage.Replace(blacklistobject, new String('*', blacklistobject.Length), StringComparison.CurrentCultureIgnoreCase); - if (maxLogLevel >= currentLog.LogLevel) + if (handler.maxLogLevel >= currentLog.LogLevel) { Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss}] "); Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); @@ -129,30 +130,30 @@ public class Logger : ILogger _ = Task.Run(() => { - LogRaised?.Invoke(null, new LogMessageEventArgs() { LogEntry = currentLog }); + handler.LogRaised?.Invoke(null, new LogMessageEventArgs() { LogEntry = currentLog }); }); try { - if (!_loggerObjects.FileBlackList.Contains(currentLog.LogLevel)) + if (!handler.FileBlackList.Contains(currentLog.LogLevel)) { Byte[] FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss}] [{LogLevelText}] {LogMessage}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); - if (OpenedFile != null) + if (handler.OpenedFile != null) { - await OpenedFile.WriteAsync(FileWrite.AsMemory(0, FileWrite.Length)); - OpenedFile.Flush(); + await handler.OpenedFile.WriteAsync(FileWrite.AsMemory(0, FileWrite.Length)); + handler.OpenedFile.Flush(); } } } catch (Exception ex) { - LogFatal($"Couldn't write log to file: {ex}"); + handler.LogFatal($"Couldn't write log to file: {ex}"); } } } catch (Exception ex) { - LogError("An exception occured while trying to display a log message", ex); + handler.LogError("An exception occured while trying to display a log message", ex); await Task.Delay(1000); continue; } @@ -167,10 +168,10 @@ public class Logger : ILogger /// /// Stops the logger /// - public static void StopLogger() + public void StopLogger() { loggerStarted = false; - maxLogLevel = LoggerObjects.LogLevel.DEBUG; + maxLogLevel = LogLevel.DEBUG; FileName = ""; Thread.Sleep(500); @@ -190,18 +191,18 @@ public class Logger : ILogger /// Add blacklisted string to censor automatically /// /// - public static void AddBlacklist(string blacklist) + public void AddBlacklist(string blacklist) { - _loggerObjects.Blacklist.Add(blacklist); + Blacklist.Add(blacklist); } /// /// Add blacklisted log level to not save /// /// - public static void AddLogLevelBlacklist(LoggerObjects.LogLevel level) + public void AddLogLevelBlacklist(LogLevel level) { - _loggerObjects.FileBlackList.Add(level); + FileBlackList.Add(level); } @@ -210,7 +211,7 @@ public class Logger : ILogger /// Changes the log level /// /// - public static void ChangeLogLevel(LoggerObjects.LogLevel level) + public void ChangeLogLevel(LogLevel level) { maxLogLevel = level; } @@ -222,12 +223,12 @@ public class Logger : ILogger /// /// /// - public static void LogNone(string message, Exception? exception = null) + public void LogNone(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.NONE, + LogLevel = LogLevel.NONE, Message = message, Exception = exception }); @@ -240,12 +241,12 @@ public class Logger : ILogger /// /// /// - public static void LogTrace(string message, Exception? exception = null) + public void LogTrace(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.TRACE, + LogLevel = LogLevel.TRACE, Message = message, Exception = exception }); @@ -258,12 +259,12 @@ public class Logger : ILogger /// /// /// - public static void LogDebug2(string message, Exception? exception = null) + public void LogDebug2(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.DEBUG2, + LogLevel = LogLevel.DEBUG2, Message = message, Exception = exception }); @@ -276,12 +277,12 @@ public class Logger : ILogger /// /// /// - public static void LogDebug(string message, Exception? exception = null) + public void LogDebug(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.DEBUG, + LogLevel = LogLevel.DEBUG, Message = message, Exception = exception }); @@ -294,12 +295,12 @@ public class Logger : ILogger /// /// /// - public static void LogInfo(string message, Exception? exception = null) + public void LogInfo(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.INFO, + LogLevel = LogLevel.INFO, Message = message, Exception = exception }); @@ -312,12 +313,12 @@ public class Logger : ILogger /// /// /// - public static void LogWarn(string message, Exception? exception = null) + public void LogWarn(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.WARN, + LogLevel = LogLevel.WARN, Message = message, Exception = exception }); @@ -330,12 +331,12 @@ public class Logger : ILogger /// /// /// - public static void LogError(string message, Exception? exception = null) + public void LogError(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.ERROR, + LogLevel = LogLevel.ERROR, Message = message, Exception = exception }); @@ -348,12 +349,12 @@ public class Logger : ILogger /// /// /// - public static void LogFatal(string message, Exception? exception = null) + public void LogFatal(string message, Exception? exception = null) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LoggerObjects.LogLevel.FATAL, + LogLevel = LogLevel.FATAL, Message = message, Exception = exception }); @@ -371,18 +372,18 @@ public class Logger : ILogger /// public void Log(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { - _loggerObjects.LogsToPost.Add(new LoggerObjects.LogEntry + LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, LogLevel = logLevel switch { - Microsoft.Extensions.Logging.LogLevel.Debug => LoggerObjects.LogLevel.DEBUG2, - Microsoft.Extensions.Logging.LogLevel.Trace => LoggerObjects.LogLevel.TRACE2, - Microsoft.Extensions.Logging.LogLevel.Information => LoggerObjects.LogLevel.INFO, - Microsoft.Extensions.Logging.LogLevel.Warning => LoggerObjects.LogLevel.WARN, - Microsoft.Extensions.Logging.LogLevel.Error => LoggerObjects.LogLevel.ERROR, - Microsoft.Extensions.Logging.LogLevel.Critical => LoggerObjects.LogLevel.FATAL, - Microsoft.Extensions.Logging.LogLevel.None => LoggerObjects.LogLevel.NONE, + Microsoft.Extensions.Logging.LogLevel.Debug => LogLevel.DEBUG2, + Microsoft.Extensions.Logging.LogLevel.Trace => LogLevel.TRACE2, + Microsoft.Extensions.Logging.LogLevel.Information => LogLevel.INFO, + Microsoft.Extensions.Logging.LogLevel.Warning => LogLevel.WARN, + Microsoft.Extensions.Logging.LogLevel.Error => LogLevel.ERROR, + Microsoft.Extensions.Logging.LogLevel.Critical => LogLevel.FATAL, + Microsoft.Extensions.Logging.LogLevel.None => LogLevel.NONE, _ => throw new NotImplementedException() }, Message = $"[{eventId.Id,2}] {formatter(state, exception)}", diff --git a/LoggerObjects.cs b/LoggerObjects.cs deleted file mode 100644 index 08a26c6..0000000 --- a/LoggerObjects.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace Xorog.Logger; - -public class LoggerObjects -{ - internal List LogsToPost = new(); - internal List Blacklist = new(); - internal List FileBlackList = new(); - - public class LogEntry - { - public DateTime TimeOfEvent { get; set; } - public LogLevel LogLevel { get; set; } - public string Message { get; set; } - public Exception? Exception { get; set; } - } - - public enum LogLevel - { - NONE, - FATAL, - ERROR, - WARN, - INFO, - DEBUG, - DEBUG2, - TRACE, - TRACE2 - } -}