From 0d7e82ab8df41e6950d97c1fa67e28389ca699d0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Feb 2024 00:20:53 +0800 Subject: [PATCH] Improve exception logging of unobserved exceptions via `FireAndForget` Coming from https://github.com/ppy/osu/issues/27076, where the log output makes finding where the exception arrived for nigh impossible. --- osu.Game/Online/Multiplayer/MultiplayerClientExtensions.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/osu.Game/Online/Multiplayer/MultiplayerClientExtensions.cs b/osu.Game/Online/Multiplayer/MultiplayerClientExtensions.cs index 2083aa4e2844..d846e7f5669c 100644 --- a/osu.Game/Online/Multiplayer/MultiplayerClientExtensions.cs +++ b/osu.Game/Online/Multiplayer/MultiplayerClientExtensions.cs @@ -23,9 +23,12 @@ public static void FireAndForget(this Task task, Action? onSuccess = null, Actio Debug.Assert(exception != null); - string message = exception.GetHubExceptionMessage() ?? exception.Message; + if (exception.GetHubExceptionMessage() is string message) + // Hub exceptions generally contain something we can show the user directly. + Logger.Log(message, level: LogLevel.Important); + else + Logger.Error(exception, $"Unobserved exception occurred via {nameof(FireAndForget)} call: {exception.Message}"); - Logger.Log(message, level: LogLevel.Important); onError?.Invoke(exception); } else