Fix log messages being duplicated

This commit is contained in:
ghorsington committed 2020-07-05 10:36:46 +03:00
1 parent a404365498
commit c49845446f
1 file changed
+32 -24
+32 -24
View File
@@ -57,8 +57,9 @@ namespace BepInEx.Bootstrap
if (_initialized) if (_initialized)
return; return;
ReplayPreloaderLogs(preloaderLogEvents);
ThreadingHelper.Initialize(); ThreadingHelper.Initialize();
// Set vitals // Set vitals
if (gameExePath != null) if (gameExePath != null)
{ {
@@ -75,38 +76,17 @@ namespace BepInEx.Bootstrap
} }
Logger.InitializeInternalLoggers(); Logger.InitializeInternalLoggers();
Logger.Listeners.Add(new UnityLogListener());
if (ConfigDiskLogging.Value) if (ConfigDiskLogging.Value)
Logger.Listeners.Add(new DiskLogListener("LogOutput.log", ConfigDiskConsoleDisplayedLevel.Value, ConfigDiskAppend.Value, ConfigDiskWriteUnityLog.Value)); Logger.Listeners.Add(new DiskLogListener("LogOutput.log", ConfigDiskConsoleDisplayedLevel.Value, ConfigDiskAppend.Value, ConfigDiskWriteUnityLog.Value));
if (!TraceLogSource.IsListening) if (!TraceLogSource.IsListening)
Logger.Sources.Add(TraceLogSource.CreateSource()); Logger.Sources.Add(TraceLogSource.CreateSource());
// Add Unity log source only after replaying to prevent duplication in console
if (ConfigUnityLogging.Value) if (ConfigUnityLogging.Value)
Logger.Sources.Add(new UnityLogSource()); Logger.Sources.Add(new UnityLogSource());
// Temporarily disable the console log listener as we replay the preloader logs
var logListener = Logger.Listeners.FirstOrDefault(logger => logger is ConsoleLogListener);
if (logListener != null)
Logger.Listeners.Remove(logListener);
// Write preloader log events if there are any, including the original log source name
if (preloaderLogEvents != null)
{
var preloaderLogSource = Logger.CreateLogSource("Preloader");
foreach (var preloaderLogEvent in preloaderLogEvents)
Logger.InternalLogEvent(preloaderLogSource, preloaderLogEvent);
Logger.Sources.Remove(preloaderLogSource);
}
if (logListener != null)
Logger.Listeners.Add(logListener);
if (Utility.CurrentOs == Platform.Linux) if (Utility.CurrentOs == Platform.Linux)
{ {
Logger.LogInfo($"Detected Unity version: v{Application.unityVersion}"); Logger.LogInfo($"Detected Unity version: v{Application.unityVersion}");
@@ -116,6 +96,34 @@ namespace BepInEx.Bootstrap
_initialized = true; _initialized = true;
} }
private static void ReplayPreloaderLogs(ICollection<LogEventArgs> preloaderLogEvents)
{
if (preloaderLogEvents == null)
return;
var unityLogger = new UnityLogListener();
Logger.Listeners.Add(unityLogger);
// Temporarily disable the console log listener (if there is one from preloader) as we replay the preloader logs
var logListener = Logger.Listeners.FirstOrDefault(logger => logger is ConsoleLogListener);
if (logListener != null)
Logger.Listeners.Remove(logListener);
// Write preloader log events if there are any, including the original log source name
var preloaderLogSource = Logger.CreateLogSource("Preloader");
foreach (var preloaderLogEvent in preloaderLogEvents)
Logger.InternalLogEvent(preloaderLogSource, preloaderLogEvent);
Logger.Sources.Remove(preloaderLogSource);
Logger.Listeners.Remove(unityLogger);
if (logListener != null)
Logger.Listeners.Add(logListener);
}
private static Regex allowedGuidRegex { get; } = new Regex(@"^[a-zA-Z0-9\._\-]+$"); private static Regex allowedGuidRegex { get; } = new Regex(@"^[a-zA-Z0-9\._\-]+$");