diff --git a/IPA.Loader/Logging/StandardLogger.cs b/IPA.Loader/Logging/StandardLogger.cs index 66e8d2f6..78dcfd64 100644 --- a/IPA.Loader/Logging/StandardLogger.cs +++ b/IPA.Loader/Logging/StandardLogger.cs @@ -188,38 +188,48 @@ namespace IPA.Logging /// private static void LogThread() { + AppDomain.CurrentDomain.ProcessExit += (sender, args) => + { + StopLogThread(); + }; + var started = new HashSet(); while (logQueue.TryTake(out var msg, Timeout.Infinite)) { - var logger = msg.Logger; - IEnumerable printers = logger.printers; do { - logger = logger.parent; - if (logger != null) - printers = printers.Concat(logger.printers); - } while (logger != null); + var logger = msg.Logger; + IEnumerable printers = logger.printers; + do + { + logger = logger.parent; + if (logger != null) + printers = printers.Concat(logger.printers); + } while (logger != null); - foreach (var printer in printers.Concat(defaultPrinters)) - { - try + foreach (var printer in printers.Concat(defaultPrinters)) { - if (((byte)msg.Level & (byte)printer.Filter) != 0) + try { - if (!started.Contains(printer)) + if (((byte) msg.Level & (byte) printer.Filter) != 0) { - printer.StartPrint(); - started.Add(printer); - } + if (!started.Contains(printer)) + { + printer.StartPrint(); + started.Add(printer); + } - printer.Print(msg.Level, msg.Time, msg.Logger.logName, msg.Message); + printer.Print(msg.Level, msg.Time, msg.Logger.logName, msg.Message); + } + } + catch (Exception e) + { + Console.WriteLine($"printer errored: {e}"); } - } - catch (Exception e) - { - Console.WriteLine($"printer errored: {e}"); } } + // wait for messages for 500ms before ending the prints + while (logQueue.TryTake(out msg, TimeSpan.FromMilliseconds(500))); if (logQueue.Count == 0) { diff --git a/Refs/UnityEngine.CoreModule.dll b/Refs/UnityEngine.CoreModule.dll index a802a5c6..0913c47b 100644 Binary files a/Refs/UnityEngine.CoreModule.dll and b/Refs/UnityEngine.CoreModule.dll differ