From af6da5b935c4856c8f06ce216735c9ab434634e8 Mon Sep 17 00:00:00 2001 From: Cuber Date: Sat, 7 Feb 2015 23:16:24 +0200 Subject: [PATCH] Add color coding for console log categories --- TrueCraft.Core/Logging/ConsoleLogProvider.cs | 14 +++++++- TrueCraft.Core/Logging/LogHelpers.cs | 37 ++++++++++++++++++++ TrueCraft.Core/TrueCraft.Core.csproj | 1 + 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 TrueCraft.Core/Logging/LogHelpers.cs diff --git a/TrueCraft.Core/Logging/ConsoleLogProvider.cs b/TrueCraft.Core/Logging/ConsoleLogProvider.cs index 2aa551b..4e94b19 100644 --- a/TrueCraft.Core/Logging/ConsoleLogProvider.cs +++ b/TrueCraft.Core/Logging/ConsoleLogProvider.cs @@ -16,7 +16,19 @@ namespace TrueCraft.Core.Logging { if ((EnabledCategories & category) != 0) { - Console.WriteLine(text, parameters); + Console.Write(LogHelpers.GetTimestamp()); + ConsoleColor currentColor = Console.ForegroundColor; + Console.ForegroundColor = LogHelpers.GetCategoryColor(category); + Console.Write(category.ToString()); + // Better to restore original than ResetColor + Console.ForegroundColor = currentColor; + // TODO: Check Console.BufferWidth and indent wrapping text onto the same level as the end of the timestamp + // Longest LogCategory is Warning (length is 7 characters) + // The log will probably mostly contain messages belonging to the + // category Notice (6 chars). We want a pad of 4 spaces on average + // and also want the text to be aligned with the last message + // 7 + 4 = 11 is the max length of (category.ToString() + pad of 4 spaces) + Console.WriteLine(new string(' ', 11 - category.ToString().Length) + text, parameters); } } } diff --git a/TrueCraft.Core/Logging/LogHelpers.cs b/TrueCraft.Core/Logging/LogHelpers.cs new file mode 100644 index 0000000..a16874c --- /dev/null +++ b/TrueCraft.Core/Logging/LogHelpers.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TrueCraft.API.Logging; + +namespace TrueCraft.Core.Logging +{ + public static class LogHelpers + { + public static string GetTimestamp(bool utc = true, string timeFormat = "u", string suffix = " ") + { + return (utc ? DateTime.UtcNow : DateTime.Now).ToString(timeFormat) + suffix; + } + + public static ConsoleColor GetCategoryColor(LogCategory category) + { + switch (category) + { + case LogCategory.Packets: + return ConsoleColor.White; + case LogCategory.Debug: + return ConsoleColor.Cyan; + case LogCategory.Warning: + return ConsoleColor.Yellow; + case LogCategory.Error: + return ConsoleColor.Red; + case LogCategory.Notice: + return ConsoleColor.Green; + case LogCategory.All: + return ConsoleColor.Magenta; + default: + return ConsoleColor.Gray; + } + } + } +} diff --git a/TrueCraft.Core/TrueCraft.Core.csproj b/TrueCraft.Core/TrueCraft.Core.csproj index 58557f8..d69e2b3 100644 --- a/TrueCraft.Core/TrueCraft.Core.csproj +++ b/TrueCraft.Core/TrueCraft.Core.csproj @@ -35,6 +35,7 @@ +