Legacy SDK

Raven is a legacy client for Sentry written in C#, used in older versions of .NET Framework.

A NuGet Package is available for SharpRaven if you don’t want to compile it yourself.

Instantiate the client with your DSN:

Copied
var ravenClient = new RavenClient("https://examplePublicKey@o0.ingest.sentry.io/0");

Call out to the client in your catch block:

Copied
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:

Copied
ravenClient.Capture(new SentryEvent("Hello World!"));

You can add additional data to the Exception.Data property on exceptions thrown about in your solution:

Copied
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 build of SharpRaven, there are async versions of the above methods as well:

Copied
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:

Copied
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
    container.Register(new Dsn("https://examplePublicKey@o0.ingest.sentry.io/0"));
}

or through configuration:

Copied
<configuration>
  <configSections>
    <section name="sharpRaven" type="SharpRaven.Nancy.NancyConfiguration, SharpRaven.Nancy" />
  </configSections>
  <sharpRaven>
    <dsn value="https://examplePublicKey@o0.ingest.sentry.io/0" />
  </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:

Copied
public class LoggingModule : NancyModule
{
    private readonly IRavenClient ravenClient;

    public LoggingModule(IRavenClient ravenClient)
    {
        this.ravenClient = ravenClient;
    }
}

Sentry supports a concept called Breadcrumbs, which is a trail of events which happened prior to an issue. Often times these events are very similar to traditional logs, but also have the ability to record more rich structured data.

Copied
public class ExampleController : ApiController
{
    private readonly IRavenClient ravenClient;

    public ExampleController(IRavenClient ravenClient)
    {
        this.ravenClient = ravenClient;
    }

    public IHttpActionResult GetProduct(int id) {
        ravenClient.AddTrail(new Breadcrumb("example") { Message = "some message...", Level = BreadcrumbLevel.Info } );

        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            ravenClient.AddTrail(new Breadcrumb("example") { Message = "Ops! It was not found.", Level = BreadcrumbLevel.Warn } );
            return NotFound();
        }

        return Ok(product);
    }
}

If an exception is raised internally to RavenClient it is logged to the Console. To extend this behavior use the property ErrorOnCapture:

Copied
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:

Copied
ravenClient.BeforeSend = requester =>
{
    // Here you can log data from the requester
    // or replace it entirely if you want.
    return requester;
}
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").