Browse Source

Add events and console colors to logging

Bepis 6 years ago
parent
commit
caf249d663

+ 4 - 4
BepInEx/Bootstrap/Preloader.cs

@@ -78,12 +78,12 @@ namespace BepInEx.Bootstrap
             {
                 try
                 {
-                    UnityInjector.ConsoleUtil.ConsoleWindow.Attach();
+                    ConsoleWindow.Attach();
 
                     if (shiftjis)
-                        UnityInjector.ConsoleUtil.ConsoleEncoding.ConsoleCodePage = 932;
+                        ConsoleEncoding.ConsoleCodePage = 932;
                     else
-                        UnityInjector.ConsoleUtil.ConsoleEncoding.ConsoleCodePage = (uint)Encoding.UTF8.CodePage;
+                        ConsoleEncoding.ConsoleCodePage = (uint)Encoding.UTF8.CodePage;
                 }
                 catch (Exception ex)
                 {
@@ -106,8 +106,8 @@ namespace BepInEx.Bootstrap
                 PreloaderLog.Enabled = true;
 
                 string consoleTile = $"BepInEx {Assembly.GetExecutingAssembly().GetName().Version} - {Process.GetCurrentProcess().ProcessName}";
-
                 ConsoleWindow.Title = consoleTile;
+                
 
                 Logger.SetLogger(PreloaderLog);
                 

+ 6 - 3
BepInEx/Logging/BaseLogger.cs

@@ -23,14 +23,17 @@ namespace BepInEx.Logging
         
         public LogLevel DisplayedLevels = LogLevel.All;
 
-
+        private object logLockObj = new object();
 
         public virtual void Log(LogLevel level, object entry)
         {
             if ((DisplayedLevels & level) != LogLevel.None)
             {
-                EntryLogged?.Invoke(level, entry);
-                WriteLine($"[{level}] {entry}");
+                lock (logLockObj)
+                {
+                    EntryLogged?.Invoke(level, entry);
+                    WriteLine($"[{level}] {entry}");
+                }
             }
         }
 

+ 40 - 0
BepInEx/Logging/LogLevel.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 
 namespace BepInEx.Logging
 {
@@ -14,4 +15,43 @@ namespace BepInEx.Logging
         Debug = 32,
         All = Fatal | Error | Warning | Message | Info | Debug
     }
+
+    public static class LogLevelExtensions
+    {
+        public static LogLevel GetHighestLevel(this LogLevel levels)
+        {
+            var enums = Enum.GetValues(typeof(LogLevel));
+            Array.Sort(enums);
+
+            foreach (LogLevel e in enums)
+            {
+                if ((levels & e) != LogLevel.None)
+                    return e;
+            }
+
+            return LogLevel.None;
+        }
+
+        public static ConsoleColor GetConsoleColor(this LogLevel level)
+        {
+            level = GetHighestLevel(level);
+
+            switch (level)
+            {
+                case LogLevel.Fatal:
+                    return ConsoleColor.Red;
+                case LogLevel.Error:
+                    return ConsoleColor.DarkRed;
+                case LogLevel.Warning:
+                    return ConsoleColor.Yellow;
+                case LogLevel.Message:
+                    return ConsoleColor.White;
+                case LogLevel.Info:
+                default:
+                    return ConsoleColor.Gray;
+                case LogLevel.Debug:
+                    return ConsoleColor.DarkGray;
+            }
+        }
+    }
 }

+ 7 - 0
BepInEx/Logging/Logger.cs

@@ -6,8 +6,15 @@ namespace BepInEx
     {
         public static BaseLogger CurrentLogger { get; set; }
 
+        /// <summary>
+        /// The listener event for an entry being logged.
+        /// </summary>
+        public static event BaseLogger.EntryLoggedEventHandler EntryLogged;
+
         public static void Log(LogLevel level, object entry)
         {
+            EntryLogged?.Invoke(level, entry);
+
             CurrentLogger?.Log(level, entry);
         }
 

+ 8 - 0
BepInEx/Logging/PreloaderLogWriter.cs

@@ -2,6 +2,7 @@
 using System.Diagnostics;
 using System.IO;
 using System.Text;
+using BepInEx.ConsoleUtil;
 
 namespace BepInEx.Logging
 {
@@ -61,6 +62,13 @@ namespace BepInEx.Logging
             _enabled = false;
         }
 
+        public override void Log(LogLevel level, object entry)
+        {
+            Kon.ForegroundColor = level.GetConsoleColor();
+            base.Log(level, entry);
+            Kon.ForegroundColor = ConsoleColor.Gray;
+        }
+
         public override void Write(char value)
         {
             StringBuilder.Append(value);

+ 8 - 0
BepInEx/Logging/UnityLogWriter.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Runtime.CompilerServices;
+using BepInEx.ConsoleUtil;
 
 namespace BepInEx.Logging
 {
@@ -16,6 +17,13 @@ namespace BepInEx.Logging
             WriteToLog(value);
         }
 
+        public override void Log(LogLevel level, object entry)
+        {
+            Kon.ForegroundColor = level.GetConsoleColor();
+            base.Log(level, entry);
+            Kon.ForegroundColor = ConsoleColor.Gray;
+        }
+
         public override void WriteLine(string value) => InternalWrite($"{value}\r\n");
         public override void Write(char value) => InternalWrite(value.ToString());
         public override void Write(string value) => InternalWrite(value);