From 601d66fe296c4c2c808f7e5ffa8787728608ec86 Mon Sep 17 00:00:00 2001 From: Serpensin Date: Wed, 30 Jul 2025 00:28:55 +0200 Subject: [PATCH 1/3] Update to version 1.1.1 with log level padding - Added consistent padding for log level field in logs. - Introduced unit test `Logger_LogLevel_Padding_Is_Consistent` to verify padding. - Modified log formatting in `Logging.cs` to ensure 5-character width for log levels. - Updated `AssemblyInfo.cs` to version 1.1.1. --- CHANGELOG.md | 4 +++ SerpentModding.Tests/UnitTest.cs | 35 +++++++++++++++++++++++ SerpentModding/Logging.cs | 3 +- SerpentModding/Properties/AssemblyInfo.cs | 4 +-- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13f902c..f465f6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [1.1.1] - 2025-07-30 +- Logger: Einheitliche Padding-Formatierung für das LogLevel-Feld im Log eingeführt, sodass alle Level (z.B. INFO, FATAL) gleich breit erscheinen. +- Logger: Unittest ergänzt, der prüft, dass das LogLevel im Log immer auf 5 Zeichen gepaddet ist. + ## [1.1.0] - 2025-07-28 - Added `UIController.RemoveControl(string name)` to allow removing registered UserControls at runtime. - Documentation: Updated README with RemoveControl usage example in the UIController section. diff --git a/SerpentModding.Tests/UnitTest.cs b/SerpentModding.Tests/UnitTest.cs index d8585c6..b7ea4a3 100644 --- a/SerpentModding.Tests/UnitTest.cs +++ b/SerpentModding.Tests/UnitTest.cs @@ -94,6 +94,41 @@ public void Logger_GetLogFilePath_And_ReadAllLogs_BeforeInit() Assert.True(string.IsNullOrEmpty(path) || !File.Exists(path)); Assert.Empty(logs); } + + [Fact] + public void Logger_LogLevel_Padding_Is_Consistent() + { + var logger = Logger.Instance; + var logDir = Path.Combine(_tempLogDirectory, "PaddingTest"); + Directory.CreateDirectory(logDir); + logger.Initialize(LogLevel.Trace, logToConsole: false, logDirectory: logDir); + logger.Trace("TracePadding"); + logger.Debug("DebugPadding"); + logger.Info("InfoPadding"); + logger.Warn("WarnPadding"); + logger.Error("ErrorPadding"); + logger.Fatal("FatalPadding"); + var logs = logger.ReadAllLogs(); + foreach (var level in new[] { "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" }) + { + var padded = level.PadRight(5); + Assert.Contains(logs, l => l.Contains($"[{padded}]") ); + } + // Zusätzlich: Jede Zeile mit [LEVEL] muss 5 Zeichen im Level-Feld haben + foreach (var line in logs) + { + var start = line.IndexOf('[') + 1; + var end = line.IndexOf(']', start); + if (start > 0 && end > start && line.Length > end + 1 && line[end + 1] == ' ' && line[start - 1] == '[') + { + var maybeLevel = line.Substring(start, end - start); + if (new[] { "TRACE", "DEBUG", "INFO ", "WARN ", "ERROR", "FATAL" }.Contains(maybeLevel)) + { + Assert.Equal(5, maybeLevel.Length); + } + } + } + } } public class UIControllerTests : IDisposable diff --git a/SerpentModding/Logging.cs b/SerpentModding/Logging.cs index 1c7dd87..7553969 100644 --- a/SerpentModding/Logging.cs +++ b/SerpentModding/Logging.cs @@ -146,7 +146,8 @@ public void Log( var callerNamespace = GetCallingNamespace(); var className = Path.GetFileNameWithoutExtension(file ?? "UnknownClass"); var location = $"{className}.{caller}():{line}"; - var formatted = $"[{timestamp}] [{level.ToString().ToUpper()}] {{{callerNamespace}}} [{location}] {message}"; + var levelStr = level.ToString().ToUpper().PadRight(5); + var formatted = $"[{timestamp}] [{levelStr}] {{{callerNamespace}}} [{location}] {message}"; lock (_lock) { diff --git a/SerpentModding/Properties/AssemblyInfo.cs b/SerpentModding/Properties/AssemblyInfo.cs index 4347835..7ec45c6 100644 --- a/SerpentModding/Properties/AssemblyInfo.cs +++ b/SerpentModding/Properties/AssemblyInfo.cs @@ -7,7 +7,7 @@ [assembly: AssemblyCompany("SerpentModding")] [assembly: AssemblyCopyright("Copyright © 2025 SerpentModding")] [assembly: AssemblyConfiguration("Library")] -[assembly: AssemblyFileVersion("1.1.0")] -[assembly: AssemblyVersion("1.1.0")] +[assembly: AssemblyFileVersion("1.1.1")] +[assembly: AssemblyVersion("1.1.1")] [assembly: ComVisible(false)] [assembly: Guid("ac5ea1b1-c699-4f4d-bd77-86c697be00d8")] From 27e9179a3a434e7f4273695f26a82584a5076ca8 Mon Sep 17 00:00:00 2001 From: Serpensin <63426826+Serpensin@users.noreply.github.com> Date: Wed, 30 Jul 2025 00:30:27 +0200 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- SerpentModding.Tests/UnitTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SerpentModding.Tests/UnitTest.cs b/SerpentModding.Tests/UnitTest.cs index b7ea4a3..bdd102e 100644 --- a/SerpentModding.Tests/UnitTest.cs +++ b/SerpentModding.Tests/UnitTest.cs @@ -114,7 +114,7 @@ public void Logger_LogLevel_Padding_Is_Consistent() var padded = level.PadRight(5); Assert.Contains(logs, l => l.Contains($"[{padded}]") ); } - // Zusätzlich: Jede Zeile mit [LEVEL] muss 5 Zeichen im Level-Feld haben + // Additionally: Each line with [LEVEL] must have 5 characters in the level field foreach (var line in logs) { var start = line.IndexOf('[') + 1; From b2723a43a79fc32c7a42e64cc1cd8246bfa65eb5 Mon Sep 17 00:00:00 2001 From: Serpensin <63426826+Serpensin@users.noreply.github.com> Date: Wed, 30 Jul 2025 00:30:48 +0200 Subject: [PATCH 3/3] Update CHANGELOG.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f465f6b..397a48c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## [1.1.1] - 2025-07-30 -- Logger: Einheitliche Padding-Formatierung für das LogLevel-Feld im Log eingeführt, sodass alle Level (z.B. INFO, FATAL) gleich breit erscheinen. -- Logger: Unittest ergänzt, der prüft, dass das LogLevel im Log immer auf 5 Zeichen gepaddet ist. +- Logger: Added consistent padding formatting for the LogLevel field in logs so that all levels (e.g., INFO, FATAL) appear with equal width. +- Logger: Added a unit test to verify that the LogLevel in logs is always padded to 5 characters. ## [1.1.0] - 2025-07-28 - Added `UIController.RemoveControl(string name)` to allow removing registered UserControls at runtime.