We've released a preview of our integration with ASP.NET Core and
Microsoft.Extensions.Logging
. If you are interested in checking it out, please go to this GitHub repository for details.These integrations are based on a new SDK, built as part of the
unified API
initiative from Sentry. If you'd like to try the new API, we'd love to get some feedback.
Official Sentry SDK for .NET.
Stable | Pre-release | |
---|---|---|
GitHub | - | |
SharpRaven | ||
SharpRaven.Nancy | ||
Travis Build | ||
AppVeyor Build |
Instantiate the client with your 'Data Source Name' (DSN):
var ravenClient = new RavenClient("https://[email protected]/project-id");
Call out to the client in your catch block:
try
{
int i2 = 0;
int i = 10 / i2;
}
catch (Exception exception)
{
ravenClient.Capture(new SentryEvent(exception));
}
You can capture a message without being bound by an exception:
ravenClient.Capture(new SentryEvent("Hello World!"));
You can add additional data to the Exception.Data
property on
exceptions thrown about in your solution:
try
{
// ...
}
catch (Exception exception)
{
exception.Data.Add("SomeKey", "SomeValue");
throw;
}
The data SomeKey
and SomeValue
will be captured and presented in the extra
property on Sentry.
Additionally, the SentryEvent
class allow you to provide extra data to be
sent with your request, such as ErrorLevel
, Fingerprint
, a custom Message
and Tags
.
In the .NET 4.5 or later build of SharpRaven, there's an async
version of the Capture
method as well:
async Task<string> CaptureAsync(SentryEvent @event);
You can install the
SharpRaven.Nancy package to capture the HTTP context in
Nancy applications. It will auto-register on the IPipelines.OnError
event, so all unhandled exceptions will be sent to Sentry.
The only thing you have to do is provide a DSN, either by registering an
instance of the Dsn
class in your container:
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
container.Register(new Dsn("https://[email protected]/project-id"));
}
or through configuration:
<configuration>
<configSections>
<section name="sharpRaven" type="SharpRaven.Nancy.NancyConfiguration, SharpRaven.Nancy" />
</configSections>
<sharpRaven>
<dsn value="https://[email protected]/project-id" />
</sharpRaven>
</configuration>
The DSN will be picked up by the auto-registered IRavenClient
instance, so if
you want to send events to Sentry, all you have to do is add a requirement on
IRavenClient
in your classes:
public class LoggingModule : NancyModule
{
private readonly IRavenClient ravenClient;
public LoggingModule(IRavenClient ravenClient)
{
this.ravenClient = ravenClient;
}
}
If an exception is raised internally to RavenClient
it is logged to the
Console
. To extend this behaviour use the property ErrorOnCapture
:
ravenClient.ErrorOnCapture = exception =>
{
// Custom code here
};
You can also hook into the BeforeSend
function to inspect or manipulate the
data being sent to Sentry before it is sent:
ravenClient.BeforeSend = requester =>
{
// Here you can log data from the requester
// or replace it entirely if you want.
return requester;
};
You can clone and build SharpRaven yourself, but for those of us who are happy with prebuilt binaries, there's NuGet packages of both SharpRaven and SharpRaven.Nancy.
- Code
- Bug Tracker
- Forum
- Mailing List
- IRC (
#sentry
onirc.freenode.net
) - Follow @getsentry on Twitter for updates