From 7ff6d1d61c18acf3ea88d221f2ffa8994a6c7142 Mon Sep 17 00:00:00 2001 From: Jhett Black <10942655+jhett12321@users.noreply.github.com> Date: Sun, 3 Dec 2023 21:28:17 +0100 Subject: [PATCH] Resolve runtime info at startup. Use console instead of nlog for crash message. (#740) * Resolve runtime info at startup. Use console instead of nlog for crash message. * Cleanup usings. --- .../src/main/AnvilCore.FunctionHandlers.cs | 16 +++++++------- NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs | 16 ++++++++++++++ NWN.Anvil/src/main/AnvilCore.cs | 21 ++++++++++--------- 3 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs diff --git a/NWN.Anvil/src/main/AnvilCore.FunctionHandlers.cs b/NWN.Anvil/src/main/AnvilCore.FunctionHandlers.cs index 3acded81a..aa8dbd836 100644 --- a/NWN.Anvil/src/main/AnvilCore.FunctionHandlers.cs +++ b/NWN.Anvil/src/main/AnvilCore.FunctionHandlers.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; -using Anvil.API; -using Anvil.Internal; using Anvil.Services; using NWN.Core; using NWN.Native.API; @@ -138,7 +136,7 @@ private static void OnAssertFail(IntPtr messagePtr, IntPtr nativeStackTracePtr) private static void OnServerCrash(int signal, IntPtr nativeStackTracePtr) { string stackTrace = nativeStackTracePtr.ReadNullTerminatedString(); - Version serverVersion = NwServer.Instance.ServerVersion; + string managedTrace = new StackTrace(true).ToString(); string error = signal switch { @@ -149,14 +147,16 @@ private static void OnServerCrash(int signal, IntPtr nativeStackTracePtr) _ => "Unknown error", }; - Log.Fatal("\n==============================================================\n" + + string message = "\n==============================================================\n" + " Please file a bug at https://github.com/nwn-dotnet/Anvil/issues\n" + - $" {Assemblies.Anvil.GetName().Name} {AssemblyInfo.VersionInfo.InformationalVersion} has crashed. Fatal error: {error} ({signal})\n" + - $" Using: NWN {serverVersion}, NWN.Core {Assemblies.Core.GetName().Version}, NWN.Native {Assemblies.Native.GetName().Version}\n" + + $" {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} has crashed. Fatal error: {error} ({signal})\n" + + $" Using: NWN {runtimeInfo.ServerVersion}, NWN.Core {runtimeInfo.CoreVersion}, NWN.Native {runtimeInfo.NativeVersion}\n" + "==============================================================\n" + " Managed Backtrace:\n" + - $"{new StackTrace(true)}" + - $"{stackTrace}"); + $"{managedTrace}" + + $"{stackTrace}"; + + Console.WriteLine(message); } } } diff --git a/NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs b/NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs new file mode 100644 index 000000000..384d465ed --- /dev/null +++ b/NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs @@ -0,0 +1,16 @@ +namespace Anvil +{ + public sealed partial class AnvilCore + { + private static RuntimeInfo runtimeInfo; + + private struct RuntimeInfo + { + public string? AssemblyName; + public string? AssemblyVersion; + public string? ServerVersion; + public string? CoreVersion; + public string? NativeVersion; + } + } +} diff --git a/NWN.Anvil/src/main/AnvilCore.cs b/NWN.Anvil/src/main/AnvilCore.cs index d41968308..81b41fbb6 100644 --- a/NWN.Anvil/src/main/AnvilCore.cs +++ b/NWN.Anvil/src/main/AnvilCore.cs @@ -102,6 +102,14 @@ private void CheckServerVersion() private void Init() { + runtimeInfo = new RuntimeInfo + { + AssemblyName = Assemblies.Anvil.GetName().Name, + AssemblyVersion = AssemblyInfo.VersionInfo.InformationalVersion, + CoreVersion = Assemblies.Core.GetName().Version?.ToString(), + NativeVersion = Assemblies.Native.GetName().Version?.ToString(), + }; + serviceManager.Init(); try @@ -110,20 +118,13 @@ private void Init() } catch (Exception e) { - Log.Fatal(e, "Failed to load {Name:l} {Version:l} (NWN.Core: {CoreVersion}, NWN.Native: {NativeVersion})", - Assemblies.Anvil.GetName().Name, - AssemblyInfo.VersionInfo.InformationalVersion, - Assemblies.Core.GetName().Version, - Assemblies.Native.GetName().Version); + Log.Fatal(e, $"Failed to load {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} (NWN.Core: {runtimeInfo.CoreVersion}, NWN.Native: {runtimeInfo.NativeVersion})"); throw; } - Log.Info("Loading {Name:l} {Version:l} (NWN.Core: {CoreVersion}, NWN.Native: {NativeVersion})", - Assemblies.Anvil.GetName().Name, - AssemblyInfo.VersionInfo.InformationalVersion, - Assemblies.Core.GetName().Version, - Assemblies.Native.GetName().Version); + runtimeInfo.ServerVersion = NwServer.Instance.ServerVersion.ToString(); + Log.Info($"Loading {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} (NWN.Core: {runtimeInfo.CoreVersion}, NWN.Native: {runtimeInfo.NativeVersion})"); CheckServerVersion(); }