Bladeren bron

Fix Unity log messages being duplicated

ghorsington 4 jaren geleden
bovenliggende
commit
ae7a9cb6ef
2 gewijzigde bestanden met toevoegingen van 13 en 2 verwijderingen
  1. 1 1
      BepInEx.Preloader/Preloader.cs
  2. 12 1
      BepInEx/Logging/ConsoleLogListener.cs

+ 1 - 1
BepInEx.Preloader/Preloader.cs

@@ -43,7 +43,6 @@ namespace BepInEx.Preloader
 				Logger.InitializeInternalLoggers();
 				Logger.Sources.Add(TraceLogSource.CreateSource());
 				
-				Logger.Listeners.Add(new ConsoleLogListener());
 				PreloaderLog = new PreloaderConsoleListener();
 				Logger.Listeners.Add(PreloaderLog);
 
@@ -223,6 +222,7 @@ namespace BepInEx.Preloader
 			try
 			{
 				ConsoleManager.CreateConsole();
+				Logger.Listeners.Add(new ConsoleLogListener());
 			}
 			catch (Exception ex)
 			{

+ 12 - 1
BepInEx/Logging/ConsoleLogListener.cs

@@ -12,11 +12,22 @@ namespace BepInEx.Logging
 		{
 			if ((eventArgs.Level & ConfigConsoleDisplayedLevel.Value) == 0)
 				return;
+			
 			ConsoleManager.SetConsoleColor(eventArgs.Level.GetConsoleColor());
-			Console.Write(eventArgs.ToStringLine());
+			Log(eventArgs);
 			ConsoleManager.SetConsoleColor(ConsoleColor.Gray);
 		}
 
+		private void Log(LogEventArgs eventArgs)
+		{
+			// Special case: if message comes from Unity log, it's already logged by Unity, in which case 
+			// we replay it only in the visible console
+			if (eventArgs.Source is UnityLogSource)
+				ConsoleManager.ConsoleStream?.Write(eventArgs.ToStringLine());
+			else
+				Console.Write(eventArgs.ToStringLine());
+		}
+
 		public void Dispose() { }
 
 		private static readonly ConfigEntry<LogLevel> ConfigConsoleDisplayedLevel = ConfigFile.CoreConfig.Bind(