From 1e7355fe8f71a03cf296196407c5bd217bbd6144 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 01/38] No more static From 9e9d10a282396425564866e0a5d673f42058f9b1 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Mon, 13 Jun 2022 10:38:08 +0200 Subject: [PATCH 02/38] =?UTF-8?q?Smart=E2=84=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Logger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logger.cs b/Logger.cs index 6a224f8..04bf974 100644 --- a/Logger.cs +++ b/Logger.cs @@ -160,7 +160,7 @@ public class Logger : ILogger } }); - return new Logger(); + return handler; } From fdca37ec6283be5ab60dac4d63160511ea4fb296 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Mon, 13 Jun 2022 11:44:01 +0200 Subject: [PATCH 03/38] Modify LoggerProvider to work with non static --- Logger.cs | 3 +++ LoggerProvider.cs | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Logger.cs b/Logger.cs index 04bf974..5c7f6e4 100644 --- a/Logger.cs +++ b/Logger.cs @@ -4,6 +4,8 @@ public class Logger : ILogger { internal Logger() { } + public LoggerProvider _provider { get; internal set; } + private bool loggerStarted = false; private LogLevel maxLogLevel = LogLevel.DEBUG; @@ -29,6 +31,7 @@ public class Logger : ILogger public static Logger StartLogger(string filePath = "", LogLevel level = LogLevel.DEBUG, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) { var handler = new Logger(); + handler._provider = new(handler); if (handler.loggerStarted) throw new Exception($"The logger is already started"); diff --git a/LoggerProvider.cs b/LoggerProvider.cs index ac8a673..082454e 100644 --- a/LoggerProvider.cs +++ b/LoggerProvider.cs @@ -9,16 +9,20 @@ using System.Threading.Tasks; namespace Xorog.Logger; public class LoggerProvider : ILoggerProvider { - private readonly ConcurrentDictionary _loggers = new(StringComparer.OrdinalIgnoreCase); + internal LoggerProvider(Logger logger) + { + _logger = logger; + } + + private Logger _logger { get; set; } public ILogger CreateLogger(string categoryName) { - return _loggers.GetOrAdd(categoryName, name => new Logger()); + return _logger; } public void Dispose() { - _loggers.Clear(); GC.SuppressFinalize(this); } } From 912ce15848b97330c56637727564d2cad405ec7e Mon Sep 17 00:00:00 2001 From: Mira Date: Tue, 12 Jul 2022 23:18:36 +0200 Subject: [PATCH 04/38] Create dependabot.yml --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..e4ca311 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "nuget" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" From c78d869938a074345d246a6774099411bbef5912 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Jul 2022 21:18:57 +0000 Subject: [PATCH 05/38] Bump Microsoft.Extensions.Logging.Abstractions from 6.0.0 to 6.0.1 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 590a571..a16f99e 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -33,7 +33,7 @@ - + From 3ec20d05d3a7c2bbf9953472d38f9d5bcbadaf10 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 20 Jul 2022 06:50:19 +0200 Subject: [PATCH 06/38] Fix msg --- Logger.cs | 4 +++- LoggerProvider.cs | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Logger.cs b/Logger.cs index 5c7f6e4..8b0515d 100644 --- a/Logger.cs +++ b/Logger.cs @@ -1,5 +1,7 @@ namespace Xorog.Logger; +#pragma warning disable IDE1006 // Naming Styles + public class Logger : ILogger { internal Logger() { } @@ -128,7 +130,7 @@ public class Logger : ILogger Console.ResetColor(); Console.WriteLine($" {LogMessage}"); if (currentLog.Exception is not null) - Console.WriteLine(currentLog.Exception.ToString()); + Console.WriteLine(currentLog.Exception); } _ = Task.Run(() => diff --git a/LoggerProvider.cs b/LoggerProvider.cs index 082454e..eb0ad30 100644 --- a/LoggerProvider.cs +++ b/LoggerProvider.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - +#pragma warning disable IDE1006 // Naming Styles namespace Xorog.Logger; public class LoggerProvider : ILoggerProvider { @@ -14,6 +14,7 @@ public class LoggerProvider : ILoggerProvider _logger = logger; } + private Logger _logger { get; set; } public ILogger CreateLogger(string categoryName) From 538808ec42c578bb06caf96fd8c641c39b72fd0d Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 19 Aug 2022 20:21:18 +0200 Subject: [PATCH 07/38] Update Logger.cs --- Logger.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Logger.cs b/Logger.cs index 8b0515d..3b3800d 100644 --- a/Logger.cs +++ b/Logger.cs @@ -125,7 +125,7 @@ public class Logger : ILogger if (handler.maxLogLevel >= currentLog.LogLevel) { - Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss}] "); + Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] "); Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); Console.ResetColor(); Console.WriteLine($" {LogMessage}"); @@ -142,7 +142,7 @@ public class Logger : ILogger { 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" : "")}"); + Byte[] FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] [{LogLevelText}] {LogMessage}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); if (handler.OpenedFile != null) { await handler.OpenedFile.WriteAsync(FileWrite.AsMemory(0, FileWrite.Length)); From c2bb8f639884a48b3088712876c4ea4b2948bdc8 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 4 Sep 2022 19:41:45 +0200 Subject: [PATCH 08/38] Update Logger.cs --- Logger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logger.cs b/Logger.cs index 3b3800d..9e768aa 100644 --- a/Logger.cs +++ b/Logger.cs @@ -158,7 +158,7 @@ public class Logger : ILogger } catch (Exception ex) { - handler.LogError("An exception occured while trying to display a log message", ex); + handler.LogError("An exception occurred while trying to display a log message", ex); await Task.Delay(1000); continue; } From 667aa66b8edecbff6ed59f8db9cf2f27296d8c53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 07:42:22 +0000 Subject: [PATCH 09/38] Bump Microsoft.Extensions.Logging.Abstractions from 6.0.1 to 6.0.2 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v6.0.1...v6.0.2) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index a16f99e..1b0335d 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -33,7 +33,7 @@ - + From cc976c86a14f55381b204c9f2b033b54ccb90fef Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 12 Oct 2022 14:44:32 +0200 Subject: [PATCH 10/38] Update Logger.cs --- Logger.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Logger.cs b/Logger.cs index 9e768aa..4ed574a 100644 --- a/Logger.cs +++ b/Logger.cs @@ -181,13 +181,11 @@ public class Logger : ILogger Thread.Sleep(500); - if (RunningLogger is not null) - RunningLogger.Dispose(); + RunningLogger?.Dispose(); RunningLogger = null; - if (OpenedFile is not null) - OpenedFile.Close(); + OpenedFile?.Close(); } From c21f2dae764e260af8249d61b8c90c0311d346c4 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 29 Nov 2022 08:11:51 +0100 Subject: [PATCH 11/38] fix: No longer the need to rely on string interpolation --- Entities/LogEntry.cs | 3 + Entities/StringPart.cs | 13 + Logger.cs | 533 +++++++++++++++++++++++++++++------------ Xorog.Logger.csproj | 1 + 4 files changed, 401 insertions(+), 149 deletions(-) create mode 100644 Entities/StringPart.cs diff --git a/Entities/LogEntry.cs b/Entities/LogEntry.cs index e041532..7bbb8b9 100644 --- a/Entities/LogEntry.cs +++ b/Entities/LogEntry.cs @@ -2,8 +2,11 @@ public class LogEntry { + internal string RawMessage { get; set; } + public DateTime TimeOfEvent { get; set; } public LogLevel LogLevel { get; set; } public string Message { get; set; } + public object[] Args { get; set; } public Exception? Exception { get; set; } } \ No newline at end of file diff --git a/Entities/StringPart.cs b/Entities/StringPart.cs new file mode 100644 index 0000000..bec6aec --- /dev/null +++ b/Entities/StringPart.cs @@ -0,0 +1,13 @@ +namespace Xorog.Logger.Entities; + +internal class StringPart : IDisposable +{ + internal string String { get; set; } + internal ConsoleColor? Color { get; set; } + + public void Dispose() + { + String = ""; + Color = null; + } +} diff --git a/Logger.cs b/Logger.cs index 4ed574a..d1a77ab 100644 --- a/Logger.cs +++ b/Logger.cs @@ -1,4 +1,6 @@ -namespace Xorog.Logger; +using Newtonsoft.Json; + +namespace Xorog.Logger; #pragma warning disable IDE1006 // Naming Styles @@ -92,10 +94,7 @@ public class Logger : ILogger continue; } - string LogLevelText = currentLog.LogLevel.ToString(); - - if (LogLevelText.Length < 6) - LogLevelText += new string(' ', 6 - LogLevelText.Length); + string LogLevelText = $"{currentLog.LogLevel,-6}"; ConsoleColor LogLevelColor; ConsoleColor BackgroundColor; @@ -118,19 +117,86 @@ public class Logger : ILogger _ => ConsoleColor.Black }; - string LogMessage = currentLog.Message; + string leftOver = currentLog.RawMessage; foreach (var blacklistobject in handler.Blacklist) - LogMessage = LogMessage.Replace(blacklistobject, new String('*', blacklistobject.Length), StringComparison.CurrentCultureIgnoreCase); + leftOver = leftOver.Replace(blacklistobject, new String('*', blacklistobject.Length), StringComparison.CurrentCultureIgnoreCase); + + int currentArg = 0; + bool inTemplate = false; + List builder = new(); + + while (leftOver.Length > 0) + { + if (inTemplate && currentLog.Args?.Length >= currentArg) + { + int endIndex = leftOver.IndexOf('}'); + + object objectToAdd = currentLog.Args[currentArg]; + currentArg++; + + if (objectToAdd.GetType() == typeof(int)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(long)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(uint)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(ulong)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray }); + + inTemplate = false; + + leftOver = leftOver[(endIndex + 1)..]; + continue; + } + + inTemplate = false; + + int placeholderIndex = leftOver.IndexOf('{'); + + if (placeholderIndex != -1 && currentLog.Args?.Length >= currentArg) + inTemplate = true; + + if (placeholderIndex is -1 or 0 || placeholderIndex > leftOver.Length) + placeholderIndex = leftOver.Length; + + builder.Add(new StringPart { String = leftOver[..placeholderIndex] }); + leftOver = leftOver[placeholderIndex..]; + } if (handler.maxLogLevel >= currentLog.LogLevel) { Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] "); - Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); - Console.ResetColor(); Console.WriteLine($" {LogMessage}"); + Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); Console.ResetColor(); Console.Write(" "); + + foreach (StringPart part in builder) + { + Console.ForegroundColor = part.Color ?? ConsoleColor.White; + Console.BackgroundColor = ConsoleColor.Black; + + Console.Write($"{part.String}"); + } + Console.ResetColor(); + Console.WriteLine(); if (currentLog.Exception is not null) - Console.WriteLine(currentLog.Exception); + try + { + Console.WriteLine(JsonConvert.SerializeObject(currentLog.Exception, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore })); + } + catch (Exception) + { + Console.WriteLine(currentLog.Exception); + } + } + + currentLog.Message = string.Join("", builder.Select(x => x.String)); + + for (int i1 = 0; i1 < builder.Count; i1++) + { + builder[i1].Dispose(); } _ = Task.Run(() => @@ -142,7 +208,7 @@ public class Logger : ILogger { if (!handler.FileBlackList.Contains(currentLog.LogLevel)) { - Byte[] FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] [{LogLevelText}] {LogMessage}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); + Byte[] FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] [{LogLevelText}] {currentLog.Message}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); if (handler.OpenedFile != null) { await handler.OpenedFile.WriteAsync(FileWrite.AsMemory(0, FileWrite.Length)); @@ -168,8 +234,6 @@ public class Logger : ILogger return handler; } - - /// /// Stops the logger /// @@ -188,181 +252,363 @@ public class Logger : ILogger OpenedFile?.Close(); } - - /// - /// Add blacklisted string to censor automatically + /// Add strings automatically censor on output to console and file. /// - /// - public void AddBlacklist(string blacklist) + /// The strings to censor + public void AddBlacklist(params string[] blacklist) { - Blacklist.Add(blacklist); + for (int i = 0; i < blacklist.Length; i++) + { + Blacklist.Add(blacklist[i]); + } } - + /// /// Add blacklisted log level to not save /// - /// - public void AddLogLevelBlacklist(LogLevel level) + /// The log levels not to save to the log file + public void AddLogLevelBlacklist(params LogLevel[] levels) { - FileBlackList.Add(level); + for (int i = 0; i < levels.Length; i++) + { + FileBlackList.Add(levels[i]); + } } - - /// /// Changes the log level /// - /// - public void ChangeLogLevel(LogLevel level) - { - maxLogLevel = level; - } - - + /// The new log level to apply + public void ChangeLogLevel(LogLevel level) => maxLogLevel = level; /// /// Log with none log level /// - /// - /// - public void LogNone(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogNone(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.NONE, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.NONE, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with none log level + /// + /// The message to display + /// The exception that was caused + public void LogNone(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.NONE, + RawMessage = message, + Exception = exception + }); + /// + /// Log with none log level + /// + /// The message to display + /// The objects involved in the event + public void LogNone(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.NONE, + RawMessage = message, + Args = args + }); /// /// Log with trace log level /// - /// - /// - public void LogTrace(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogTrace(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.TRACE, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.TRACE, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with trace log level + /// + /// The message to display + /// The exception that was caused + public void LogTrace(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.TRACE, + RawMessage = message, + Exception = exception + }); + /// + /// Log with trace log level + /// + /// The message to display + /// The objects involved in the event + public void LogTrace(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.TRACE, + RawMessage = message, + Args = args, + }); /// /// Log with debug2 log level /// - /// - /// - public void LogDebug2(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogDebug2(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG2, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG2, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with debug2 log level + /// + /// The message to display + /// The exception that was caused + public void LogDebug2(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG2, + RawMessage = message, + Exception = exception + }); + /// + /// Log with debug2 log level + /// + /// The message to display + /// The objects involved in the event + public void LogDebug2(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG2, + RawMessage = message, + Args = args + }); /// /// Log with debug log level /// - /// - /// - public void LogDebug(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogDebug(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with debug log level + /// + /// The message to display + /// The exception that was caused + public void LogDebug(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG, + RawMessage = message, + Exception = exception + }); + /// + /// Log with debug log level + /// + /// The message to display + /// The objects involved in the event + public void LogDebug(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.DEBUG, + RawMessage = message, + Args = args + }); /// /// Log with info log level /// - /// - /// - public void LogInfo(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogInfo(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.INFO, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.INFO, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with info log level + /// + /// The message to display + /// The exception that was caused + public void LogInfo(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.INFO, + RawMessage = message, + Exception = exception + }); + /// + /// Log with info log level + /// + /// The message to display + /// The objects involved in the event + public void LogInfo(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.INFO, + RawMessage = message, + Args = args + }); /// /// Log with warn log level /// - /// - /// - public void LogWarn(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogWarn(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.WARN, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.WARN, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with warn log level + /// + /// The message to display + /// The exception that was caused + public void LogWarn(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.WARN, + RawMessage = message, + Exception = exception + }); + /// + /// Log with warn log level + /// + /// The message to display + /// The objects involved in the event + public void LogWarn(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.WARN, + RawMessage = message, + Args = args + }); /// /// Log with error log level /// - /// - /// - public void LogError(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogError(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.ERROR, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.ERROR, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with error log level + /// + /// The message to display + /// The exception that was caused + public void LogError(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.ERROR, + RawMessage = message, + Exception = exception + }); + /// + /// Log with error log level + /// + /// The message to display + /// The objects involved in the event + public void LogError(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.ERROR, + RawMessage = message, + Args = args + }); /// /// Log with fatal log level /// - /// - /// - public void LogFatal(string message, Exception? exception = null) + /// The message to display + /// The exception that was caused + /// The objects involved in the event + public void LogFatal(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry - { - TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.FATAL, - Message = message, - Exception = exception - }); - } + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.FATAL, + RawMessage = message, + Args = args, + Exception = exception + }); + /// + /// Log with fatal log level + /// + /// The message to display + /// The exception that was caused + public void LogFatal(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.FATAL, + RawMessage = message, + Exception = exception + }); + + /// + /// Log with fatal log level + /// + /// The message to display + /// The objects involved in the event + public void LogFatal(string message, params object[] args) => LogsToPost.Add(new LogEntry + { + TimeOfEvent = DateTime.Now, + LogLevel = LogLevel.FATAL, + RawMessage = message, + Args = args + }); /// /// Log with standard Microsoft.Extensions.Logging format @@ -373,38 +619,27 @@ public class Logger : ILogger /// /// /// - public void Log(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + public void Log(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) => LogsToPost.Add(new LogEntry { - LogsToPost.Add(new LogEntry + TimeOfEvent = DateTime.Now, + LogLevel = logLevel switch { - TimeOfEvent = DateTime.Now, - LogLevel = logLevel switch - { - 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)}", - Exception = exception - }); - } - - - - public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel) - { - return loggerStarted; - } - + 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, + _ => LogLevel.NONE, + }, + RawMessage = $"[{eventId.Id}] {formatter(state, exception)}", + Exception = exception + }); + public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel) + => loggerStarted; public IDisposable BeginScope(TState state) - { - return default!; - } + => default!; } diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 1b0335d..d221006 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -34,6 +34,7 @@ + From 18795d104f1d54623b2a24be7da413fee9a30d8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 07:15:15 +0000 Subject: [PATCH 12/38] Bump Microsoft.Extensions.Logging.Abstractions from 6.0.2 to 7.0.0 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 6.0.2 to 7.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index d221006..91bb017 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -33,7 +33,7 @@ - + From 1e4bcb07b0a4d67c6fd9332b6bd963e52b90e5ae Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 29 Nov 2022 09:04:46 +0100 Subject: [PATCH 13/38] fix: '{0}{1}' is now parsed correctly --- Logger.cs | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/Logger.cs b/Logger.cs index d1a77ab..b7d96fe 100644 --- a/Logger.cs +++ b/Logger.cs @@ -104,7 +104,7 @@ public class Logger : ILogger LogLevel.TRACE => ConsoleColor.Gray, LogLevel.DEBUG2 => ConsoleColor.Gray, LogLevel.DEBUG => ConsoleColor.Gray, - LogLevel.INFO => ConsoleColor.Green, + LogLevel.INFO => ConsoleColor.Cyan, LogLevel.WARN => ConsoleColor.Yellow, LogLevel.ERROR => ConsoleColor.Red, LogLevel.FATAL => ConsoleColor.Black, @@ -124,46 +124,56 @@ public class Logger : ILogger int currentArg = 0; bool inTemplate = false; + bool attemptedParsing = false; List builder = new(); while (leftOver.Length > 0) { - if (inTemplate && currentLog.Args?.Length >= currentArg) + if (inTemplate) { - int endIndex = leftOver.IndexOf('}'); + attemptedParsing = true; + if (currentLog.Args?.Length >= currentArg) + { + int endIndex = leftOver.IndexOf('}'); - object objectToAdd = currentLog.Args[currentArg]; - currentArg++; + object objectToAdd = currentLog.Args[currentArg]; + currentArg++; - if (objectToAdd.GetType() == typeof(int)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); - else if (objectToAdd.GetType() == typeof(long)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); - else if (objectToAdd.GetType() == typeof(uint)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); - else if (objectToAdd.GetType() == typeof(ulong)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); - else - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray }); + if (objectToAdd.GetType() == typeof(int)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(long)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(uint)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else if (objectToAdd.GetType() == typeof(ulong)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + else + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray }); - inTemplate = false; + inTemplate = false; - leftOver = leftOver[(endIndex + 1)..]; - continue; + leftOver = leftOver[(endIndex + 1)..]; + attemptedParsing = false; + continue; + } } inTemplate = false; int placeholderIndex = leftOver.IndexOf('{'); - if (placeholderIndex != -1 && currentLog.Args?.Length >= currentArg) + if (placeholderIndex != -1) inTemplate = true; - if (placeholderIndex is -1 or 0 || placeholderIndex > leftOver.Length) + if (placeholderIndex == -1 || placeholderIndex > leftOver.Length) + placeholderIndex = leftOver.Length; + + if (placeholderIndex == 0 && attemptedParsing) placeholderIndex = leftOver.Length; builder.Add(new StringPart { String = leftOver[..placeholderIndex] }); leftOver = leftOver[placeholderIndex..]; + attemptedParsing = false; } if (handler.maxLogLevel >= currentLog.LogLevel) From 9cb981e86d818c6a34100572da27119e8f277826 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 29 Nov 2022 09:06:58 +0100 Subject: [PATCH 14/38] fix: dont add empty strings to builder --- Logger.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Logger.cs b/Logger.cs index b7d96fe..82695a3 100644 --- a/Logger.cs +++ b/Logger.cs @@ -171,7 +171,10 @@ public class Logger : ILogger if (placeholderIndex == 0 && attemptedParsing) placeholderIndex = leftOver.Length; - builder.Add(new StringPart { String = leftOver[..placeholderIndex] }); + var str = leftOver[..placeholderIndex]; + if (!string.IsNullOrEmpty(str)) + builder.Add(new StringPart { String = str }); + leftOver = leftOver[placeholderIndex..]; attemptedParsing = false; } From 311650f29ade6de03e14a13db9bee660efc6f60e Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 29 Nov 2022 09:11:22 +0100 Subject: [PATCH 15/38] Update Logger.cs --- Logger.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Logger.cs b/Logger.cs index 82695a3..16f44bc 100644 --- a/Logger.cs +++ b/Logger.cs @@ -211,6 +211,7 @@ public class Logger : ILogger { builder[i1].Dispose(); } + builder.Clear(); _ = Task.Run(() => { From 997108f3d0e6470dd3094a3b2beeac6ab5e4d999 Mon Sep 17 00:00:00 2001 From: Mira Date: Sun, 29 Jan 2023 18:13:47 +0100 Subject: [PATCH 16/38] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e8a43a..f1e54bb 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# Xorog.Logger \ No newline at end of file +# Xorog.Logger + +The logger used in projects of Fortunevale. + +## Used in + +- [BeatRecorder](https://github.com/TheXorog/BeatRecorder) + + From 9bc5bd0308618fa78ecea530d56ccde3a92c02ef Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 29 Jan 2023 21:47:51 +0100 Subject: [PATCH 17/38] fix: Change colors to make them visible in linux --- Logger.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Logger.cs b/Logger.cs index 16f44bc..f3a74a4 100644 --- a/Logger.cs +++ b/Logger.cs @@ -140,15 +140,15 @@ public class Logger : ILogger currentArg++; if (objectToAdd.GetType() == typeof(int)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); else if (objectToAdd.GetType() == typeof(long)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); else if (objectToAdd.GetType() == typeof(uint)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); else if (objectToAdd.GetType() == typeof(ulong)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); else - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.DarkGray }); + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); inTemplate = false; From a4608d4a749f86ca4951672d5c7c968b3fb2c096 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 29 Jan 2023 21:51:12 +0100 Subject: [PATCH 18/38] fix: Create destination directory if not exist --- Logger.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Logger.cs b/Logger.cs index f3a74a4..eb200b5 100644 --- a/Logger.cs +++ b/Logger.cs @@ -34,6 +34,8 @@ public class Logger : ILogger /// A bool stating if the logger was started public static Logger StartLogger(string filePath = "", LogLevel level = LogLevel.DEBUG, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) { + filePath = filePath.Replace("\\", "/"); + var handler = new Logger(); handler._provider = new(handler); @@ -42,6 +44,14 @@ public class Logger : ILogger if (filePath is not "") { + if (filePath.Contains('/')) + { + var dirPath = filePath[..filePath.LastIndexOf('/')]; + + if (!Directory.Exists(dirPath)) + Directory.CreateDirectory(dirPath); + } + handler.FileName = filePath; handler.OpenedFile = File.Open(handler.FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read); } From f03407e9b7055f86c3794f874b469b7a33b23423 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:02:09 +0000 Subject: [PATCH 19/38] Bump Newtonsoft.Json from 13.0.2 to 13.0.3 Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 13.0.2 to 13.0.3. - [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases) - [Commits](https://github.com/JamesNK/Newtonsoft.Json/commits) --- updated-dependencies: - dependency-name: Newtonsoft.Json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 91bb017..1548af1 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -34,7 +34,7 @@ - + From a3b7eccc3dee7c5f68aaaf6f8cdd55432178bfe0 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 9 May 2023 15:06:03 +0200 Subject: [PATCH 20/38] chore(deps): Update to .NET 7.0 --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 1548af1..08a49a8 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -1,7 +1,7 @@ - net6.0 + net7.0 enable annotations Debug;Release;x64 From 7b5dfa673af28b1b643122f2dff5e44ac176b5ab Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 26 May 2023 10:57:47 +0200 Subject: [PATCH 21/38] fix nre --- Logger.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Logger.cs b/Logger.cs index eb200b5..f475978 100644 --- a/Logger.cs +++ b/Logger.cs @@ -149,6 +149,9 @@ public class Logger : ILogger object objectToAdd = currentLog.Args[currentArg]; currentArg++; + if (objectToAdd is null) + continue; + if (objectToAdd.GetType() == typeof(int)) builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); else if (objectToAdd.GetType() == typeof(long)) From 933fe1f5e9e3e93aab3176320b72091afb6cb1aa Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 26 May 2023 11:05:17 +0200 Subject: [PATCH 22/38] Update Logger.cs --- Logger.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Logger.cs b/Logger.cs index f475978..ca8fcd8 100644 --- a/Logger.cs +++ b/Logger.cs @@ -146,6 +146,9 @@ public class Logger : ILogger { int endIndex = leftOver.IndexOf('}'); + if (currentArg > currentLog.Args.Length) + continue; + object objectToAdd = currentLog.Args[currentArg]; currentArg++; From 03355fe27b5e49115550a676d5e9e0979e60ffd2 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 26 May 2023 11:09:31 +0200 Subject: [PATCH 23/38] fuck this --- Logger.cs | 55 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/Logger.cs b/Logger.cs index ca8fcd8..56b4513 100644 --- a/Logger.cs +++ b/Logger.cs @@ -144,32 +144,39 @@ public class Logger : ILogger attemptedParsing = true; if (currentLog.Args?.Length >= currentArg) { - int endIndex = leftOver.IndexOf('}'); + try + { + int endIndex = leftOver.IndexOf('}'); - if (currentArg > currentLog.Args.Length) + if (currentArg > currentLog.Args.Length) + continue; + + object objectToAdd = currentLog.Args[currentArg]; + currentArg++; + + if (objectToAdd is null) + continue; + + if (objectToAdd.GetType() == typeof(int)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); + else if (objectToAdd.GetType() == typeof(long)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); + else if (objectToAdd.GetType() == typeof(uint)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); + else if (objectToAdd.GetType() == typeof(ulong)) + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); + else + builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); + + inTemplate = false; + + leftOver = leftOver[(endIndex + 1)..]; + attemptedParsing = false; + } + catch (Exception) + { continue; - - object objectToAdd = currentLog.Args[currentArg]; - currentArg++; - - if (objectToAdd is null) - continue; - - if (objectToAdd.GetType() == typeof(int)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); - else if (objectToAdd.GetType() == typeof(long)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); - else if (objectToAdd.GetType() == typeof(uint)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); - else if (objectToAdd.GetType() == typeof(ulong)) - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Magenta }); - else - builder.Add(new StringPart { String = objectToAdd.ToString(), Color = ConsoleColor.Cyan }); - - inTemplate = false; - - leftOver = leftOver[(endIndex + 1)..]; - attemptedParsing = false; + } continue; } } From a7e5672e1852f98cdb85af16b1a42dcfa89aef26 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 30 May 2023 21:18:04 +0200 Subject: [PATCH 24/38] Update Logger.cs --- Logger.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Logger.cs b/Logger.cs index 56b4513..22b5f71 100644 --- a/Logger.cs +++ b/Logger.cs @@ -175,6 +175,7 @@ public class Logger : ILogger } catch (Exception) { + currentArg++; continue; } continue; From 53596d9b8a8bbe91a82caad9558dcd14cf57cd6f Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 30 May 2023 22:02:03 +0200 Subject: [PATCH 25/38] Update Logger.cs --- Logger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logger.cs b/Logger.cs index 22b5f71..a0d3fea 100644 --- a/Logger.cs +++ b/Logger.cs @@ -99,7 +99,7 @@ public class Logger : ILogger handler.LogsToPost.Remove(currentLog); - if (currentLog is null) + if (currentLog is null || currentLog.Message is null) { continue; } From 8969bb00cc3ae43b18981214be711861297ecbe9 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 31 May 2023 17:09:02 +0200 Subject: [PATCH 26/38] Update Logger.cs --- Logger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Logger.cs b/Logger.cs index a0d3fea..7b4f1bb 100644 --- a/Logger.cs +++ b/Logger.cs @@ -99,7 +99,7 @@ public class Logger : ILogger handler.LogsToPost.Remove(currentLog); - if (currentLog is null || currentLog.Message is null) + if (currentLog is null || currentLog.RawMessage is null) { continue; } From 2cb5b1a1698f2f80a4502e09bce205180a9d979c Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 7 Jun 2023 00:10:00 +0200 Subject: [PATCH 27/38] Refactor --- Entities/LogEntry.cs | 4 +- Entities/StringPart.cs | 2 +- Enums/CustomLogLevel.cs | 14 +++++ Enums/LogLevel.cs | 14 ----- Events/LogMessageEventArgs.cs | 5 +- Global.cs | 5 +- GlobalSuppressions.cs | 8 +++ Logger.cs => LoggerClient.cs | 104 ++++++++++++++++++---------------- LoggerProvider.cs | 15 ++--- 9 files changed, 87 insertions(+), 84 deletions(-) create mode 100644 Enums/CustomLogLevel.cs delete mode 100644 Enums/LogLevel.cs create mode 100644 GlobalSuppressions.cs rename Logger.cs => LoggerClient.cs (89%) diff --git a/Entities/LogEntry.cs b/Entities/LogEntry.cs index 7bbb8b9..216ca0e 100644 --- a/Entities/LogEntry.cs +++ b/Entities/LogEntry.cs @@ -1,11 +1,11 @@ -namespace Xorog.Logger.Entities; +namespace Xorog.Logger; public class LogEntry { internal string RawMessage { get; set; } public DateTime TimeOfEvent { get; set; } - public LogLevel LogLevel { get; set; } + public CustomLogLevel LogLevel { get; set; } public string Message { get; set; } public object[] Args { get; set; } public Exception? Exception { get; set; } diff --git a/Entities/StringPart.cs b/Entities/StringPart.cs index bec6aec..6f8cc23 100644 --- a/Entities/StringPart.cs +++ b/Entities/StringPart.cs @@ -1,4 +1,4 @@ -namespace Xorog.Logger.Entities; +namespace Xorog.Logger; internal class StringPart : IDisposable { diff --git a/Enums/CustomLogLevel.cs b/Enums/CustomLogLevel.cs new file mode 100644 index 0000000..42fc1e8 --- /dev/null +++ b/Enums/CustomLogLevel.cs @@ -0,0 +1,14 @@ +namespace Xorog.Logger; + +public enum CustomLogLevel +{ + None, + Fatal, + Error, + Warn, + Info, + Debug, + Debug2, + Trace, + Trace2 +} \ No newline at end of file diff --git a/Enums/LogLevel.cs b/Enums/LogLevel.cs deleted file mode 100644 index 0ff84e1..0000000 --- a/Enums/LogLevel.cs +++ /dev/null @@ -1,14 +0,0 @@ -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 866b949..30fe8fd 100644 --- a/Events/LogMessageEventArgs.cs +++ b/Events/LogMessageEventArgs.cs @@ -1,7 +1,6 @@ -namespace Xorog.Logger; +namespace Xorog.Logger.EventArgs; -public class LogMessageEventArgs : EventArgs +public class LogMessageEventArgs : System.EventArgs { public LogEntry LogEntry { get; set; } - } \ No newline at end of file diff --git a/Global.cs b/Global.cs index 26ca27b..e2658b3 100644 --- a/Global.cs +++ b/Global.cs @@ -4,7 +4,4 @@ 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 +global using System.Threading.Tasks; \ No newline at end of file diff --git a/GlobalSuppressions.cs b/GlobalSuppressions.cs new file mode 100644 index 0000000..67e20ae --- /dev/null +++ b/GlobalSuppressions.cs @@ -0,0 +1,8 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "", Scope = "member", Target = "~P:Xorog.Logger.LoggerProvider._logger")] diff --git a/Logger.cs b/LoggerClient.cs similarity index 89% rename from Logger.cs rename to LoggerClient.cs index 7b4f1bb..b600eba 100644 --- a/Logger.cs +++ b/LoggerClient.cs @@ -1,24 +1,25 @@ using Newtonsoft.Json; +using Xorog.Logger.EventArgs; namespace Xorog.Logger; #pragma warning disable IDE1006 // Naming Styles -public class Logger : ILogger +public class LoggerClient : ILogger { - internal Logger() { } + internal LoggerClient() { } public LoggerProvider _provider { get; internal set; } private bool loggerStarted = false; - private LogLevel maxLogLevel = LogLevel.DEBUG; + private CustomLogLevel maxLogLevel = CustomLogLevel.Debug; private string FileName = ""; private FileStream OpenedFile { get; set; } internal List LogsToPost = new(); internal List Blacklist = new(); - internal List FileBlackList = new(); + internal List FileBlackList = new(); private Task RunningLogger = null; @@ -32,11 +33,16 @@ 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 Logger StartLogger(string filePath = "", LogLevel level = LogLevel.DEBUG, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) + public static LoggerClient StartLogger(string filePath = "", CustomLogLevel level = CustomLogLevel.Debug, DateTime cleanUpBefore = new DateTime(), bool ThrowOnFailedDeletion = false) { + DirectoryInfo directoryInfo = new(new FileInfo(filePath).DirectoryName); + + if (!directoryInfo.Exists) + directoryInfo.Create(); + filePath = filePath.Replace("\\", "/"); - var handler = new Logger(); + var handler = new LoggerClient(); handler._provider = new(handler); if (handler.loggerStarted) @@ -111,19 +117,19 @@ public class Logger : ILogger LogLevelColor = currentLog.LogLevel switch { - LogLevel.TRACE => ConsoleColor.Gray, - LogLevel.DEBUG2 => ConsoleColor.Gray, - LogLevel.DEBUG => ConsoleColor.Gray, - LogLevel.INFO => ConsoleColor.Cyan, - LogLevel.WARN => ConsoleColor.Yellow, - LogLevel.ERROR => ConsoleColor.Red, - LogLevel.FATAL => ConsoleColor.Black, + CustomLogLevel.Trace => ConsoleColor.Gray, + CustomLogLevel.Debug2 => ConsoleColor.Gray, + CustomLogLevel.Debug => ConsoleColor.Gray, + CustomLogLevel.Info => ConsoleColor.Cyan, + CustomLogLevel.Warn => ConsoleColor.Yellow, + CustomLogLevel.Error => ConsoleColor.Red, + CustomLogLevel.Fatal => ConsoleColor.Black, _ => ConsoleColor.Gray }; BackgroundColor = currentLog.LogLevel switch { - LogLevel.FATAL => ConsoleColor.DarkRed, + CustomLogLevel.Fatal => ConsoleColor.DarkRed, _ => ConsoleColor.Black }; @@ -278,7 +284,7 @@ public class Logger : ILogger public void StopLogger() { loggerStarted = false; - maxLogLevel = LogLevel.DEBUG; + maxLogLevel = CustomLogLevel.Debug; FileName = ""; Thread.Sleep(500); @@ -306,7 +312,7 @@ public class Logger : ILogger /// Add blacklisted log level to not save /// /// The log levels not to save to the log file - public void AddLogLevelBlacklist(params LogLevel[] levels) + public void AddLogLevelBlacklist(params CustomLogLevel[] levels) { for (int i = 0; i < levels.Length; i++) { @@ -318,7 +324,7 @@ public class Logger : ILogger /// Changes the log level /// /// The new log level to apply - public void ChangeLogLevel(LogLevel level) => maxLogLevel = level; + public void ChangeLogLevel(CustomLogLevel level) => maxLogLevel = level; /// /// Log with none log level @@ -329,7 +335,7 @@ public class Logger : ILogger public void LogNone(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.NONE, + LogLevel = CustomLogLevel.None, RawMessage = message, Args = args, Exception = exception @@ -343,7 +349,7 @@ public class Logger : ILogger public void LogNone(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.NONE, + LogLevel = CustomLogLevel.None, RawMessage = message, Exception = exception }); @@ -356,7 +362,7 @@ public class Logger : ILogger public void LogNone(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.NONE, + LogLevel = CustomLogLevel.None, RawMessage = message, Args = args }); @@ -370,7 +376,7 @@ public class Logger : ILogger public void LogTrace(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.TRACE, + LogLevel = CustomLogLevel.Trace, RawMessage = message, Args = args, Exception = exception @@ -384,7 +390,7 @@ public class Logger : ILogger public void LogTrace(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.TRACE, + LogLevel = CustomLogLevel.Trace, RawMessage = message, Exception = exception }); @@ -397,7 +403,7 @@ public class Logger : ILogger public void LogTrace(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.TRACE, + LogLevel = CustomLogLevel.Trace, RawMessage = message, Args = args, }); @@ -411,7 +417,7 @@ public class Logger : ILogger public void LogDebug2(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG2, + LogLevel = CustomLogLevel.Debug2, RawMessage = message, Args = args, Exception = exception @@ -425,7 +431,7 @@ public class Logger : ILogger public void LogDebug2(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG2, + LogLevel = CustomLogLevel.Debug2, RawMessage = message, Exception = exception }); @@ -438,7 +444,7 @@ public class Logger : ILogger public void LogDebug2(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG2, + LogLevel = CustomLogLevel.Debug2, RawMessage = message, Args = args }); @@ -452,7 +458,7 @@ public class Logger : ILogger public void LogDebug(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG, + LogLevel = CustomLogLevel.Debug, RawMessage = message, Args = args, Exception = exception @@ -466,7 +472,7 @@ public class Logger : ILogger public void LogDebug(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG, + LogLevel = CustomLogLevel.Debug, RawMessage = message, Exception = exception }); @@ -479,7 +485,7 @@ public class Logger : ILogger public void LogDebug(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.DEBUG, + LogLevel = CustomLogLevel.Debug, RawMessage = message, Args = args }); @@ -493,7 +499,7 @@ public class Logger : ILogger public void LogInfo(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.INFO, + LogLevel = CustomLogLevel.Info, RawMessage = message, Args = args, Exception = exception @@ -507,7 +513,7 @@ public class Logger : ILogger public void LogInfo(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.INFO, + LogLevel = CustomLogLevel.Info, RawMessage = message, Exception = exception }); @@ -520,7 +526,7 @@ public class Logger : ILogger public void LogInfo(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.INFO, + LogLevel = CustomLogLevel.Info, RawMessage = message, Args = args }); @@ -534,7 +540,7 @@ public class Logger : ILogger public void LogWarn(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.WARN, + LogLevel = CustomLogLevel.Warn, RawMessage = message, Args = args, Exception = exception @@ -548,7 +554,7 @@ public class Logger : ILogger public void LogWarn(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.WARN, + LogLevel = CustomLogLevel.Warn, RawMessage = message, Exception = exception }); @@ -561,7 +567,7 @@ public class Logger : ILogger public void LogWarn(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.WARN, + LogLevel = CustomLogLevel.Warn, RawMessage = message, Args = args }); @@ -575,7 +581,7 @@ public class Logger : ILogger public void LogError(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.ERROR, + LogLevel = CustomLogLevel.Error, RawMessage = message, Args = args, Exception = exception @@ -589,7 +595,7 @@ public class Logger : ILogger public void LogError(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.ERROR, + LogLevel = CustomLogLevel.Error, RawMessage = message, Exception = exception }); @@ -602,7 +608,7 @@ public class Logger : ILogger public void LogError(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.ERROR, + LogLevel = CustomLogLevel.Error, RawMessage = message, Args = args }); @@ -616,7 +622,7 @@ public class Logger : ILogger public void LogFatal(string message, Exception? exception = null, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.FATAL, + LogLevel = CustomLogLevel.Fatal, RawMessage = message, Args = args, Exception = exception @@ -630,7 +636,7 @@ public class Logger : ILogger public void LogFatal(string message, Exception? exception = null) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.FATAL, + LogLevel = CustomLogLevel.Fatal, RawMessage = message, Exception = exception }); @@ -643,7 +649,7 @@ public class Logger : ILogger public void LogFatal(string message, params object[] args) => LogsToPost.Add(new LogEntry { TimeOfEvent = DateTime.Now, - LogLevel = LogLevel.FATAL, + LogLevel = CustomLogLevel.Fatal, RawMessage = message, Args = args }); @@ -662,14 +668,14 @@ public class Logger : ILogger TimeOfEvent = DateTime.Now, LogLevel = logLevel switch { - 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, - _ => LogLevel.NONE, + Microsoft.Extensions.Logging.LogLevel.Debug => CustomLogLevel.Debug2, + Microsoft.Extensions.Logging.LogLevel.Trace => CustomLogLevel.Trace2, + Microsoft.Extensions.Logging.LogLevel.Information => CustomLogLevel.Info, + Microsoft.Extensions.Logging.LogLevel.Warning => CustomLogLevel.Warn, + Microsoft.Extensions.Logging.LogLevel.Error => CustomLogLevel.Error, + Microsoft.Extensions.Logging.LogLevel.Critical => CustomLogLevel.Fatal, + Microsoft.Extensions.Logging.LogLevel.None => CustomLogLevel.None, + _ => CustomLogLevel.None, }, RawMessage = $"[{eventId.Id}] {formatter(state, exception)}", Exception = exception diff --git a/LoggerProvider.cs b/LoggerProvider.cs index eb0ad30..2471ee6 100644 --- a/LoggerProvider.cs +++ b/LoggerProvider.cs @@ -1,21 +1,14 @@ -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -#pragma warning disable IDE1006 // Naming Styles -namespace Xorog.Logger; +namespace Xorog.Logger; + public class LoggerProvider : ILoggerProvider { - internal LoggerProvider(Logger logger) + internal LoggerProvider(LoggerClient logger) { _logger = logger; } - private Logger _logger { get; set; } + private LoggerClient _logger { get; set; } public ILogger CreateLogger(string categoryName) { From 332b6172aee34c28d169fb26f7e15376a73f906a Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:31:34 +0200 Subject: [PATCH 28/38] Target x64 --- Properties/launchSettings.json | 7 +++++++ Xorog.Logger.csproj | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 Properties/launchSettings.json diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json new file mode 100644 index 0000000..e91e38b --- /dev/null +++ b/Properties/launchSettings.json @@ -0,0 +1,7 @@ +{ + "profiles": { + "Xorog.Logger": { + "commandName": "Project" + } + } +} \ No newline at end of file diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 08a49a8..9fec6f0 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -1,11 +1,11 @@ - + net7.0 enable annotations Debug;Release;x64 - AnyCPU;x64 + x64 @@ -14,10 +14,12 @@ embedded + True embedded + False @@ -26,10 +28,12 @@ embedded + True embedded + False From 7c1ff06fa50e10f3c42f7e0cc42ca0769cf29172 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Thu, 8 Jun 2023 03:27:52 +0200 Subject: [PATCH 29/38] Seal + Docs --- Entities/LogEntry.cs | 31 ++++++++++++++++++++++++++----- LoggerClient.cs | 36 ++++++++++++++++++++---------------- LoggerProvider.cs | 2 +- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/Entities/LogEntry.cs b/Entities/LogEntry.cs index 216ca0e..081bae6 100644 --- a/Entities/LogEntry.cs +++ b/Entities/LogEntry.cs @@ -2,11 +2,32 @@ public class LogEntry { + internal LogEntry() { } + internal string RawMessage { get; set; } - public DateTime TimeOfEvent { get; set; } - public CustomLogLevel LogLevel { get; set; } - public string Message { get; set; } - public object[] Args { get; set; } - public Exception? Exception { get; set; } + /// + /// The time of the event. + /// + public DateTime TimeOfEvent { get; internal set; } + + /// + /// The severity of the event. + /// + public CustomLogLevel LogLevel { get; internal set; } + + /// + /// The message describing the event. + /// + public string Message { get; internal set; } + + /// + /// Any objects involved in creating the event message. + /// + public object[] Args { get; internal set; } = Array.Empty(); + + /// + /// The exception that's been caused. + /// + public Exception? Exception { get; internal set; } } \ No newline at end of file diff --git a/LoggerClient.cs b/LoggerClient.cs index b600eba..c59064c 100644 --- a/LoggerClient.cs +++ b/LoggerClient.cs @@ -3,16 +3,17 @@ using Xorog.Logger.EventArgs; namespace Xorog.Logger; -#pragma warning disable IDE1006 // Naming Styles - -public class LoggerClient : ILogger +public sealed class LoggerClient : ILogger { internal LoggerClient() { } - public LoggerProvider _provider { get; internal set; } + /// + /// The . + /// + public LoggerProvider Provider { get; internal set; } - private bool loggerStarted = false; - private CustomLogLevel maxLogLevel = CustomLogLevel.Debug; + private bool LoggerStarted = false; + private CustomLogLevel MaxLogLevel = CustomLogLevel.Debug; private string FileName = ""; private FileStream OpenedFile { get; set; } @@ -23,6 +24,9 @@ public class LoggerClient : ILogger private Task RunningLogger = null; + /// + /// Fired when a log message has been sent. + /// public event EventHandler LogRaised; @@ -43,9 +47,9 @@ public class LoggerClient : ILogger filePath = filePath.Replace("\\", "/"); var handler = new LoggerClient(); - handler._provider = new(handler); + handler.Provider = new(handler); - if (handler.loggerStarted) + if (handler.LoggerStarted) throw new Exception($"The logger is already started"); if (filePath is not "") @@ -62,8 +66,8 @@ public class LoggerClient : ILogger handler.OpenedFile = File.Open(handler.FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read); } - handler.loggerStarted = true; - handler.maxLogLevel = level; + handler.LoggerStarted = true; + handler.MaxLogLevel = level; if (cleanUpBefore != new DateTime()) { @@ -90,7 +94,7 @@ public class LoggerClient : ILogger handler.RunningLogger = Task.Run(async () => { - while (handler.loggerStarted) + while (handler.LoggerStarted) { try { @@ -209,7 +213,7 @@ public class LoggerClient : ILogger attemptedParsing = false; } - if (handler.maxLogLevel >= currentLog.LogLevel) + if (handler.MaxLogLevel >= currentLog.LogLevel) { Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] "); Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); Console.ResetColor(); Console.Write(" "); @@ -283,8 +287,8 @@ public class LoggerClient : ILogger /// public void StopLogger() { - loggerStarted = false; - maxLogLevel = CustomLogLevel.Debug; + LoggerStarted = false; + MaxLogLevel = CustomLogLevel.Debug; FileName = ""; Thread.Sleep(500); @@ -324,7 +328,7 @@ public class LoggerClient : ILogger /// Changes the log level /// /// The new log level to apply - public void ChangeLogLevel(CustomLogLevel level) => maxLogLevel = level; + public void ChangeLogLevel(CustomLogLevel level) => MaxLogLevel = level; /// /// Log with none log level @@ -682,7 +686,7 @@ public class LoggerClient : ILogger }); public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel) - => loggerStarted; + => LoggerStarted; public IDisposable BeginScope(TState state) => default!; diff --git a/LoggerProvider.cs b/LoggerProvider.cs index 2471ee6..39b21af 100644 --- a/LoggerProvider.cs +++ b/LoggerProvider.cs @@ -1,6 +1,6 @@ namespace Xorog.Logger; -public class LoggerProvider : ILoggerProvider +public sealed class LoggerProvider : ILoggerProvider { internal LoggerProvider(LoggerClient logger) { From 25898aff5185c97b468e0f2cdad9a968fac08840 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 08:03:04 +0000 Subject: [PATCH 30/38] Bump Microsoft.Extensions.Logging.Abstractions from 7.0.0 to 7.0.1 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.0...v7.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 9fec6f0..dbda4ed 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -1,4 +1,4 @@ - + net7.0 @@ -37,7 +37,7 @@ - + From 40e8632a77dd685ed761862afddf062832e86cd8 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 18 Jun 2023 20:43:10 +0200 Subject: [PATCH 31/38] Update LoggerClient.cs --- LoggerClient.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LoggerClient.cs b/LoggerClient.cs index c59064c..c29342c 100644 --- a/LoggerClient.cs +++ b/LoggerClient.cs @@ -308,7 +308,8 @@ public sealed class LoggerClient : ILogger { for (int i = 0; i < blacklist.Length; i++) { - Blacklist.Add(blacklist[i]); + if (!string.IsNullOrWhiteSpace(blacklist[i])) + Blacklist.Add(blacklist[i]); } } From e18aa2ef51e80ff10ecbaa7c9da93eb44c04ed38 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 18 Jun 2023 21:43:23 +0200 Subject: [PATCH 32/38] Update LoggerClient.cs --- LoggerClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LoggerClient.cs b/LoggerClient.cs index c29342c..2f15556 100644 --- a/LoggerClient.cs +++ b/LoggerClient.cs @@ -152,7 +152,7 @@ public sealed class LoggerClient : ILogger if (inTemplate) { attemptedParsing = true; - if (currentLog.Args?.Length >= currentArg) + if (currentLog.Args?.Length >= currentArg && currentLog.Args?.Length != 0) { try { From f1a061edc1d5a55372eb6892e020122c42c5ecb4 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Sun, 6 Aug 2023 19:14:08 +0200 Subject: [PATCH 33/38] refactor: Apply .editorconfig --- LoggerClient.cs | 39 ++++++++++++++++++--------------------- LoggerProvider.cs | 18 ++++++------------ 2 files changed, 24 insertions(+), 33 deletions(-) diff --git a/LoggerClient.cs b/LoggerClient.cs index 2f15556..fea391c 100644 --- a/LoggerClient.cs +++ b/LoggerClient.cs @@ -59,7 +59,7 @@ public sealed class LoggerClient : ILogger var dirPath = filePath[..filePath.LastIndexOf('/')]; if (!Directory.Exists(dirPath)) - Directory.CreateDirectory(dirPath); + _ = Directory.CreateDirectory(dirPath); } handler.FileName = filePath; @@ -103,10 +103,10 @@ public sealed class LoggerClient : ILogger Thread.Sleep(10); } - for (int i = 0; i < handler.LogsToPost.Count; i++) + for (var i = 0; i < handler.LogsToPost.Count; i++) { var currentLog = handler.LogsToPost[0]; - handler.LogsToPost.Remove(currentLog); + _ = handler.LogsToPost.Remove(currentLog); if (currentLog is null || currentLog.RawMessage is null) @@ -114,7 +114,7 @@ public sealed class LoggerClient : ILogger continue; } - string LogLevelText = $"{currentLog.LogLevel,-6}"; + var LogLevelText = $"{currentLog.LogLevel,-6}"; ConsoleColor LogLevelColor; ConsoleColor BackgroundColor; @@ -137,14 +137,14 @@ public sealed class LoggerClient : ILogger _ => ConsoleColor.Black }; - string leftOver = currentLog.RawMessage; + var leftOver = currentLog.RawMessage; foreach (var blacklistobject in handler.Blacklist) leftOver = leftOver.Replace(blacklistobject, new String('*', blacklistobject.Length), StringComparison.CurrentCultureIgnoreCase); - int currentArg = 0; - bool inTemplate = false; - bool attemptedParsing = false; + var currentArg = 0; + var inTemplate = false; + var attemptedParsing = false; List builder = new(); while (leftOver.Length > 0) @@ -156,12 +156,12 @@ public sealed class LoggerClient : ILogger { try { - int endIndex = leftOver.IndexOf('}'); + var endIndex = leftOver.IndexOf('}'); if (currentArg > currentLog.Args.Length) continue; - object objectToAdd = currentLog.Args[currentArg]; + var objectToAdd = currentLog.Args[currentArg]; currentArg++; if (objectToAdd is null) @@ -194,7 +194,7 @@ public sealed class LoggerClient : ILogger inTemplate = false; - int placeholderIndex = leftOver.IndexOf('{'); + var placeholderIndex = leftOver.IndexOf('{'); if (placeholderIndex != -1) inTemplate = true; @@ -218,7 +218,7 @@ public sealed class LoggerClient : ILogger Console.ResetColor(); Console.Write($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] "); Console.ForegroundColor = LogLevelColor; Console.BackgroundColor = BackgroundColor; Console.Write($"[{LogLevelText}]"); Console.ResetColor(); Console.Write(" "); - foreach (StringPart part in builder) + foreach (var part in builder) { Console.ForegroundColor = part.Color ?? ConsoleColor.White; Console.BackgroundColor = ConsoleColor.Black; @@ -241,22 +241,19 @@ public sealed class LoggerClient : ILogger currentLog.Message = string.Join("", builder.Select(x => x.String)); - for (int i1 = 0; i1 < builder.Count; i1++) + for (var i1 = 0; i1 < builder.Count; i1++) { builder[i1].Dispose(); } builder.Clear(); - _ = Task.Run(() => - { - handler.LogRaised?.Invoke(null, new LogMessageEventArgs() { LogEntry = currentLog }); - }); + _ = Task.Run(() => handler.LogRaised?.Invoke(null, new LogMessageEventArgs() { LogEntry = currentLog })); try { if (!handler.FileBlackList.Contains(currentLog.LogLevel)) { - Byte[] FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] [{LogLevelText}] {currentLog.Message}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); + var FileWrite = Encoding.UTF8.GetBytes($"[{currentLog.TimeOfEvent:dd.MM.yyyy HH:mm:ss:fff}] [{LogLevelText}] {currentLog.Message}\n{(currentLog.Exception is not null ? $"{currentLog.Exception}\n" : "")}"); if (handler.OpenedFile != null) { await handler.OpenedFile.WriteAsync(FileWrite.AsMemory(0, FileWrite.Length)); @@ -297,7 +294,7 @@ public sealed class LoggerClient : ILogger RunningLogger = null; - OpenedFile?.Close(); + this.OpenedFile?.Close(); } /// @@ -306,7 +303,7 @@ public sealed class LoggerClient : ILogger /// The strings to censor public void AddBlacklist(params string[] blacklist) { - for (int i = 0; i < blacklist.Length; i++) + for (var i = 0; i < blacklist.Length; i++) { if (!string.IsNullOrWhiteSpace(blacklist[i])) Blacklist.Add(blacklist[i]); @@ -319,7 +316,7 @@ public sealed class LoggerClient : ILogger /// The log levels not to save to the log file public void AddLogLevelBlacklist(params CustomLogLevel[] levels) { - for (int i = 0; i < levels.Length; i++) + for (var i = 0; i < levels.Length; i++) { FileBlackList.Add(levels[i]); } diff --git a/LoggerProvider.cs b/LoggerProvider.cs index 39b21af..b8d02be 100644 --- a/LoggerProvider.cs +++ b/LoggerProvider.cs @@ -2,21 +2,15 @@ public sealed class LoggerProvider : ILoggerProvider { - internal LoggerProvider(LoggerClient logger) - { - _logger = logger; - } + internal LoggerProvider(LoggerClient logger) + => this._logger = logger; private LoggerClient _logger { get; set; } - public ILogger CreateLogger(string categoryName) - { - return _logger; - } + public ILogger CreateLogger(string categoryName) + => this._logger; - public void Dispose() - { - GC.SuppressFinalize(this); - } + public void Dispose() + => GC.SuppressFinalize(this); } From a2ed87f7ce446877e3609fd5fb72a508a7b7e344 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Wed, 23 Aug 2023 04:26:20 +0200 Subject: [PATCH 34/38] Update LoggerClient.cs --- LoggerClient.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/LoggerClient.cs b/LoggerClient.cs index fea391c..6b1a463 100644 --- a/LoggerClient.cs +++ b/LoggerClient.cs @@ -231,7 +231,12 @@ public sealed class LoggerClient : ILogger if (currentLog.Exception is not null) try { - Console.WriteLine(JsonConvert.SerializeObject(currentLog.Exception, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore })); + Console.WriteLine(JsonConvert.SerializeObject(currentLog.Exception, Formatting.Indented, new JsonSerializerSettings() + { + NullValueHandling = NullValueHandling.Ignore, + ReferenceLoopHandling = ReferenceLoopHandling.Ignore, + Error = (serializer, err) => err.ErrorContext.Handled = true + })); } catch (Exception) { From f8e254440b8225746b6b6e365a6634c4bdbb857e Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Tue, 3 Oct 2023 13:44:23 +0200 Subject: [PATCH 35/38] fix: RunAnalyzersDuringBuild to False --- Xorog.Logger.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 9fec6f0..4df1373 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -6,6 +6,7 @@ annotations Debug;Release;x64 x64 + False From f045bd7dbcb3b2debf76c0f1bca3b8243eb8d2e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 07:29:50 +0000 Subject: [PATCH 36/38] Bump Microsoft.Extensions.Logging.Abstractions from 7.0.1 to 8.0.0 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 7.0.1 to 8.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.1...v8.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index a9aabc8..7825911 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -38,7 +38,7 @@ - + From ee2719ec6750e43fe18cffe8614052ac9f4a9fa4 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Mon, 20 Nov 2023 09:14:59 +0100 Subject: [PATCH 37/38] chore: Update to net8 --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index 7825911..bc4d097 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 enable annotations Debug;Release;x64 From f3d8fdfe0405fc37147c9c672bfd93de3c1c34bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 07:21:48 +0000 Subject: [PATCH 38/38] Bump Microsoft.Extensions.Logging.Abstractions from 8.0.0 to 8.0.1 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Xorog.Logger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xorog.Logger.csproj b/Xorog.Logger.csproj index bc4d097..c16daaa 100644 --- a/Xorog.Logger.csproj +++ b/Xorog.Logger.csproj @@ -38,7 +38,7 @@ - +