diff --git a/NLog.Targets.Sentry/SentryTarget.cs b/NLog.Targets.Sentry/SentryTarget.cs index 3ebbc2b..9ed8c37 100755 --- a/NLog.Targets.Sentry/SentryTarget.cs +++ b/NLog.Targets.Sentry/SentryTarget.cs @@ -54,22 +54,19 @@ public string Dsn /// public SentryTarget() { - client = new Lazy(() => new RavenClient(dsn)); + client = new Lazy(this.DefaultClientFactory); } /// /// Internal constructor, used for unit-testing /// /// A - internal SentryTarget(IRavenClient ravenClient) : this() + internal SentryTarget(IRavenClient ravenClient) { client = new Lazy(() => ravenClient); } - /// - /// Writes logging event to the log target. - /// - /// Logging event to be written out. + /// protected override void Write(LogEventInfo logEvent) { try @@ -97,11 +94,35 @@ protected override void Write(LogEventInfo logEvent) client.Value.CaptureException(logEvent.Exception, extra: extras, level: LoggingLevelMap[logEvent.Level], message: sentryMessage, tags: tags); } } - catch (Exception e) + catch (Exception ex) { - InternalLogger.Error("Unable to send Sentry request: {0}", e.Message); + this.LogException(ex); } } - } -} + /// + protected override void Dispose(bool disposing) + { + if (disposing && this.client.IsValueCreated) + { + var ravenClient = this.client.Value as RavenClient; + if (ravenClient != null) + { + ravenClient.ErrorOnCapture = null; + } + } + + base.Dispose(disposing); + } + + private IRavenClient DefaultClientFactory() + { + return new RavenClient(dsn) { ErrorOnCapture = this.LogException }; + } + + private void LogException(Exception ex) + { + InternalLogger.Error("Unable to send Sentry request: {0}", ex.Message); + } + } +} \ No newline at end of file