1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 16:12:57 +08:00

Merge pull request #3240 from peppy/fix-multiple-sentry-reports

Fix multiple sentry reports arriving for similar exceptions
This commit is contained in:
Dan Balasescu 2018-08-17 12:51:54 +09:00 committed by GitHub
commit af7cda37ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 3 deletions

View File

@ -62,9 +62,11 @@ namespace osu.Desktop
{ {
bool continueExecution = Interlocked.Decrement(ref allowableExceptions) >= 0; bool continueExecution = Interlocked.Decrement(ref allowableExceptions) >= 0;
Logger.Log($"Unhandled exception has been {(continueExecution ? "allowed" : "denied")} with {allowableExceptions} more allowable exceptions."); Logger.Log($"Unhandled exception has been {(continueExecution ? "allowed with {allowableExceptions} more allowable exceptions" : "denied")} .");
// restore the stock of allowable exceptions after a short delay.
Task.Delay(1000).ContinueWith(_ => Interlocked.Increment(ref allowableExceptions)); Task.Delay(1000).ContinueWith(_ => Interlocked.Increment(ref allowableExceptions));
return continueExecution; return continueExecution;
} }
} }

View File

@ -19,6 +19,8 @@ namespace osu.Game.Utils
private readonly List<Task> tasks = new List<Task>(); private readonly List<Task> tasks = new List<Task>();
private Exception lastException;
public RavenLogger(OsuGame game) public RavenLogger(OsuGame game)
{ {
raven.Release = game.Version; raven.Release = game.Version;
@ -29,8 +31,20 @@ namespace osu.Game.Utils
{ {
if (entry.Level < LogLevel.Verbose) return; if (entry.Level < LogLevel.Verbose) return;
if (entry.Exception != null) var exception = entry.Exception;
queuePendingTask(raven.CaptureAsync(new SentryEvent(entry.Exception)));
if (exception != null)
{
// since we let unhandled exceptions go ignored at times, we want to ensure they don't get submitted on subsequent reports.
if (lastException != null &&
lastException.Message == exception.Message && exception.StackTrace.StartsWith(lastException.StackTrace))
{
return;
}
lastException = exception;
queuePendingTask(raven.CaptureAsync(new SentryEvent(exception)));
}
else else
raven.AddTrail(new Breadcrumb(entry.Target.ToString(), BreadcrumbType.Navigation) { Message = entry.Message }); raven.AddTrail(new Breadcrumb(entry.Target.ToString(), BreadcrumbType.Navigation) { Message = entry.Message });
}; };