private void processLogEntry(LogEntry entry) { if (entry.Level < LogLevel.Verbose) { return; } var exception = entry.Exception; if (exception != null) { if (!shouldSubmitException(exception)) { return; } // 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, StringComparison.Ordinal)) { return; } lastException = exception; sentry.CaptureEvent(new SentryEvent(exception) { Message = entry.Message }, sentryScope); } else { sentryScope.AddBreadcrumb(DateTimeOffset.Now, entry.Message, entry.Target.ToString(), "navigation"); } }
public SentryLogger(OsuGame game) { if (!game.IsDeployedBuild) { return; } var options = new SentryOptions { Dsn = new Dsn("https://[email protected]/1255255"), Release = game.Version }; sentry = new SentryClient(options); sentryScope = new Scope(options); Exception lastException = null; Logger.NewEntry += entry => { if (entry.Level < LogLevel.Verbose) { return; } var exception = entry.Exception; if (exception != null) { if (!shouldSubmitException(exception)) { return; } // 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, StringComparison.Ordinal)) { return; } lastException = exception; sentry.CaptureEvent(new SentryEvent(exception) { Message = entry.Message }, sentryScope); } else { sentryScope.AddBreadcrumb(DateTimeOffset.Now, entry.Message, entry.Target.ToString(), "navigation"); } }; }
public SentryLogger(QsorBaseGame game) { if (DebugUtils.IsDebugBuild) { return; } var sentryOptions = new SentryOptions { Dsn = new Dsn("https://[email protected]/5193034"), Release = QsorBaseGame.Version }; _sentry = new SentryClient(sentryOptions); var sentryScope = new Scope(sentryOptions); Exception lastException = null; Logger.NewEntry += async entry => { if (entry.Level < LogLevel.Verbose) { return; } var exception = entry.Exception; if (exception != null) { if (lastException != null && // We shouldn't resubmit the same exception lastException.Message == exception.Message && exception.StackTrace?.StartsWith(lastException.StackTrace ?? string.Empty) == true) { return; } _sentry.CaptureEvent(new SentryEvent(exception) { Message = entry.Message }, sentryScope); lastException = exception; } else { sentryScope.AddBreadcrumb(DateTimeOffset.Now, entry.Message, entry.Target.ToString(), "qsor-logger"); } }; }
public void Log(object logMessage, LogLevel logLevel, params string[] vals) { if (logLevel == LogLevel.Critical && logMessage is Exception exception && !(exception is NonLoggableException)) { var sentryEvent = new SentryEvent(exception); lock (_lockingObject) { foreach (var contextKeyValue in ContextData) { sentryEvent.SetExtra(contextKeyValue.Key, contextKeyValue.Value); } SentryClient.CaptureEvent(sentryEvent); } } }
/// <inheritdoc /> public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter) { // Skip irrelevant logging levels if (!IsEnabled(logLevel)) { return; } // Case in which logger.LogError("message") is used if (exception == null) { exception = new Exception($"No exception thrown. Message included: {state}"); } // Log to sentry var sentryEvent = new SentryEvent(exception); sentryEvent.SetExtra("configuration", _serializedConfiguration); sentryEvent.SetExtra("algorithm_configuration", _serializedAlgorithmConfiguration); _sentryClient.CaptureEvent(sentryEvent); }