|
@@ -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,46 +76,53 @@ 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());
|
|
|
|
|
|
|
|
+ if (Utility.CurrentOs == Platform.Linux)
|
|
|
|
+ {
|
|
|
|
+ Logger.LogInfo($"Detected Unity version: v{Application.unityVersion}");
|
|
|
|
+ }
|
|
|
|
|
|
- // Temporarily disable the console log listener as we replay the preloader logs
|
|
|
|
- var logListener = Logger.Listeners.FirstOrDefault(logger => logger is ConsoleLogListener);
|
|
|
|
|
|
+ Logger.LogMessage("Chainloader ready");
|
|
|
|
|
|
|
|
+ _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)
|
|
if (logListener != null)
|
|
Logger.Listeners.Remove(logListener);
|
|
Logger.Listeners.Remove(logListener);
|
|
|
|
|
|
// Write preloader log events if there are any, including the original log source name
|
|
// Write preloader log events if there are any, including the original log source name
|
|
- if (preloaderLogEvents != null)
|
|
|
|
- {
|
|
|
|
- var preloaderLogSource = Logger.CreateLogSource("Preloader");
|
|
|
|
|
|
+ var preloaderLogSource = Logger.CreateLogSource("Preloader");
|
|
|
|
|
|
- foreach (var preloaderLogEvent in preloaderLogEvents)
|
|
|
|
- Logger.InternalLogEvent(preloaderLogSource, preloaderLogEvent);
|
|
|
|
|
|
+ foreach (var preloaderLogEvent in preloaderLogEvents)
|
|
|
|
+ Logger.InternalLogEvent(preloaderLogSource, preloaderLogEvent);
|
|
|
|
|
|
- Logger.Sources.Remove(preloaderLogSource);
|
|
|
|
- }
|
|
|
|
|
|
+ Logger.Sources.Remove(preloaderLogSource);
|
|
|
|
|
|
|
|
+ Logger.Listeners.Remove(unityLogger);
|
|
|
|
+
|
|
if (logListener != null)
|
|
if (logListener != null)
|
|
Logger.Listeners.Add(logListener);
|
|
Logger.Listeners.Add(logListener);
|
|
-
|
|
|
|
- if (Utility.CurrentOs == Platform.Linux)
|
|
|
|
- {
|
|
|
|
- Logger.LogInfo($"Detected Unity version: v{Application.unityVersion}");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Logger.LogMessage("Chainloader ready");
|
|
|
|
-
|
|
|
|
- _initialized = true;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private static Regex allowedGuidRegex { get; } = new Regex(@"^[a-zA-Z0-9\._\-]+$");
|
|
private static Regex allowedGuidRegex { get; } = new Regex(@"^[a-zA-Z0-9\._\-]+$");
|