Add Sentry Error Tracking (#2670)

* Add Sentry Error Tracking

* Omit personally identifiable information and add additional sentry context

* Remove debug message

* Make sentry opt-out and add related notices and strings

Also add Minecraft Version to error context

* Update build to send release info to sentry

* Adjust sentry error tracking

- Send the user-friendly Minecraft Version in the error logs
- Capture exceptions in more parts of the application

We now capture exceptions from the following locations:
- Protocol18 (1.8+) Packet errors
- Errors during client initialization phase (When client is about to start, session keys are NEVER sent to sentry)

* Make Sentry DSN configurable and repository-specific

The Sentry DSN will automatically be filled out on the main repository through the Github Actions build.

* Update build-and-release.yml

Update sed command

* style: change variable name

nitpick, just to make it a little bit more descriptive

* Add Sentry branding in README.

* remove old code (merge conflict)
This commit is contained in:
breadbyte 2024-06-22 06:41:13 +08:00 committed by GitHub
parent 8756ff5b3c
commit 08551097c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 148 additions and 24 deletions

View file

@ -21,6 +21,7 @@ using MinecraftClient.Protocol.ProfileKey;
using MinecraftClient.Protocol.Session;
using MinecraftClient.Proxy;
using MinecraftClient.Scripting;
using Sentry;
using static MinecraftClient.Settings;
namespace MinecraftClient
@ -191,6 +192,33 @@ namespace MinecraftClient
Log.WarnEnabled = Config.Logging.WarningMessages;
Log.ErrorEnabled = Config.Logging.ErrorMessages;
// SENTRY: Send our client version and server version to Sentry
SentrySdk.ConfigureScope(scope =>
{
scope.SetTag("Protocol Version", protocolversion.ToString());
scope.SetTag("Minecraft Version", ProtocolHandler.ProtocolVersion2MCVer(protocolversion));
scope.SetTag("MCC Build", Program.BuildInfo == null ? "Debug" : Program.BuildInfo);
if (forgeInfo != null)
scope.SetTag("Forge Version", forgeInfo?.Version.ToString());
scope.Contexts["Server Information"] = new
{
ProtocolVersion = protocolversion,
MinecraftVersion = ProtocolHandler.ProtocolVersion2MCVer(protocolversion),
ForgeInfo = forgeInfo?.Version
};
scope.Contexts["Client Configuration"] = new
{
TerrainAndMovementsEnabled = terrainAndMovementsEnabled,
InventoryHandlingEnabled = inventoryHandlingEnabled,
EntityHandlingEnabled = entityHandlingEnabled
};
});
SentrySdk.StartSession();
/* Load commands from Commands namespace */
LoadCommands();
@ -588,6 +616,8 @@ namespace MinecraftClient
}
}
SentrySdk.EndSession();
if (!will_restart)
{
ConsoleInteractive.ConsoleReader.StopReadThread();