Serilog.Sinks.Raygun 5.3.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package Serilog.Sinks.Raygun --version 5.3.3                
NuGet\Install-Package Serilog.Sinks.Raygun -Version 5.3.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Serilog.Sinks.Raygun" Version="5.3.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Serilog.Sinks.Raygun --version 5.3.3                
#r "nuget: Serilog.Sinks.Raygun, 5.3.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Serilog.Sinks.Raygun as a Cake Addin
#addin nuget:?package=Serilog.Sinks.Raygun&version=5.3.3

// Install Serilog.Sinks.Raygun as a Cake Tool
#tool nuget:?package=Serilog.Sinks.Raygun&version=5.3.3                

serilog-sinks-raygun

Serilog Sinks error and performance monitoring with Raygun is available using the serilog-sinks-raygun provider.

serilog-sinks-raygun is a library that you can easily add to your website or web application, which will then monitor your application and display all Serilog errors and issues affecting your users within your Raygun account. Installation is painless.

The provider is a single package (Serilog.Sinks.Raygun) which includes the sole dependency (Serilog), allowing you to drop it straight in.

Getting started

Step 1 - Add packages

Install the Serilog (if not included already) and Serilog.Sinks.Raygun package into your project. You can either use the below dotnet CLI command, or the NuGet management GUI in the IDE you use.

 dotnet add package Serilog
 dotnet add package Serilog.Sinks.Raygun 

Step 2 - Initialization

There are two recommended options for initializing the Raygun Serilog Sink. Which option is best to use depends on the application.

Option 1 - Using logger configuration

You can initialize Raygun's Serilog Sink through a Logger Configuration. This should be done inside of the main entry point of your application - for instance, Program.Main(), Global.asax, Application_Start Etc. The exact entry point will differ between frameworks.

Minimum setup example:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Raygun("paste_your_api_key_here")
    .CreateLogger();

Example setup with optional properties:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Raygun("paste_your_api_key_here",
      ListOfWrapperExceptions,
      "CustomUserNameProperty",
      "CustomAppVersionProperty",
      LogEventLevel.Information,
      CustomFormatProvider,
      new[] { "globalTag1", "globalTag2" },
      new[] { "ignoreField1", "ignoreField2" },
      "CustomGroupKeyProperty",
      "CustomTagsProperty",
      "CustomUserInfoProperty",
      onBeforeSendArguments => { /*OnBeforeSend: Action<onBeforeSendArguments>*/ })
    .CreateLogger();

Option 2 - Using the JSON configuration file

You can initialize Raygun's Serilog Sink inside a Serilog JSON configuration file using the following examples.

Minimum setup example:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Raygun"
    ],
    "WriteTo": [
      {
        "Name": "Raygun",
        "Args": {
          "applicationKey": "paste_your_api_key_here"
		}
      }
    ]
  }  
}

Example setup with optional properties:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Raygun"
    ],
    "WriteTo": [
      {
        "Name": "Raygun",
        "Args": {
          "applicationKey": "paste_your_api_key_here",
          "userNameProperty": "CustomUserNameProperty",
          "applicationVersionProperty": "CustomAppVersionProperty",
          "restrictedToMinimumLevel": "Error",
          "ignoredFormFieldNames": ["ignoreField1", "ignoreField2"],
          "tags": ["globalTag1", "globalTag2"],
          "groupKeyProperty": "CustomGroupKeyProperty",
          "tagsProperty": "CustomTagsProperty",
          "userInfoProperty": "CustomUserInfoProperty"
        }
      }
    ]
  }  
}

Configuration Properties

applicationKey

type: string

required

Each application you create in Raygun will have an API key which you can pass in here to specify where the crash reports will be sent to. Although this is required, you can set this to null or empty string which would result in crash reports not being sent. This can be useful if you want to configure your local environment to not send crash reports to Raygun and then use config transforms or the like to provide an API key for other environments.

wrapperExceptions

type: IEnumerable<Type>

default: null

This is a list of wrapper exception types that you're not interested in logging to Raygun. Whenever an undesired wrapper exception is logged, it will be discarded and only the inner exception(s) will be logged.

For example, you may not be interested in the details of an AggregateException, so you could include typeof(AggregateException) in this list of wrapperExceptions. All inner exceptions of any logged AggregateException would then be sent to Raygun as separate crash reports.

userNameProperty

type: string

default: UserName

This is so you can specify the username to log the information as a part of the crash report. By default it is UserName. You can set this to be to null if you do not want to use this feature.

Log.ForContext("CustomUserNameProperty", "John Doe").Error(new Exception("random error"), "other information");

applicationVersionProperty

type: string

default: ApplicationVersion

By default, crash reports sent to Raygun will have an ApplicationVersion field based on the version of the entry assembly for your application. If this is not being picked up correctly, or if you want to provide a different version, then you can do so by including the desired value in the logging properties collection.

You can specify the property key that you place the version in by using this applicationVersionProperty setting. Otherwise the version will be read from the "ApplicationVersion" key.

Log.ForContext("CustomAppVersionProperty", "1.2.11").Error(new Exception("random error"), "other information");

restrictedToMinimumLevel

type: LogEventLevel

default: LogEventLevel.Error

You can set the minimum log event level required in order to write an event to the sink. By default, this is set to Error as Raygun is mostly used for error reporting.

formatProvider

type: IFormatProvider

default: null

This property supplies culture-specific formatting information. By default, it is null.

tags

type: IEnumerable<string>

default: null

This is a list of global tags that will be included on every crash report sent with this Serilog sink.

ignoredFormFieldNames

type: IEnumerable<string>

default: null

Crash reports sent to Raygun from this Serilog sink will include HTTP context details if present. (Currently only supported in .NET Framework applications). This option lets you specify a list of form fields that you do not want to be sent to Raygun.

Setting ignoredFormFieldNames to a list that only contains "*" will cause no form fields to be sent to Raygun. Placing * before, after or at both ends of an entry will perform an ends-with, starts-with or contains operation respectively.

Note that HTTP headers, query parameters, cookies, server variables and raw request data can also be filtered out. Configuration to do so is described in the RaygunSettings section further below.

The ignoreFormFieldNames entries will also strip out specified values from the raw request payload if it is multipart/form-data.

groupKeyProperty

type: string

default: GroupKey

Crash reports sent to Raygun will be automatically grouped together based on stack trace and exception type information. The groupKeyProperty setting specifies a key in the logging properties collection where you can provide a grouping key. Crash reports containing a grouping key will not be grouped automatically by Raygun. Instead, crash reports with matching custom grouping keys will be grouped together.

Log.ForContext("CustomGroupKeyProperty", "TransactionId-12345").Error(new Exception("random error"), "other information");

tagsProperty

type: string

default: Tags

This allows you to specify a key in the properties collection that contains a list of tags to include on crash reports. Note that these will be included in addition to any global tags described above. If you set a list of tags in the properties collection multiple times (e.g. at different logging scopes) then only the latest list of tags will be used.

Log.ForContext("CustomTagsProperty", new[] {"tag1", "tag2"}).Error(new Exception("random error"), "other information");
Log.Error(new Exception("random error"), "other information {@CustomTagsProperty}", new[] {"tag3", "tag4"});

userInfoProperty

type: string

default: null

This is null by default, so you need to configure the userInfoProperty name if you want to log more user information in this way. This will cause the provided RaygunIdentifierMessage to be included in the "User" section of the Raygun payload, allowing the information to be picked up by the "Users" section of the Raygun service. It's recommended to destructure the RaygunIdentifierMessage, but this feature will still work if you don't. Sending user information in this way will overwrite the use of the userNameProperty.

The user identifier passed into the RaygunIdentifierMessage constructor could be the users name, email address, database id or whatever works best for you to identify unique users.

var userInfo = new RaygunIdentifierMessage("12345")
{
    FirstName = "John",
    FullName = "John Doe",
    Email = "johndoe@email.address"
};

Log.ForContext("CustomUserInfoProperty", userInfo, true).Error(new Exception("random error"), "other information");

onBeforeSend

type: Action<OnBeforeSendParameters>

default: null

This action allows you to manipulate the crash report payloads that get sent to Raygun. By default it is null, so you don't need to set it in the constructor. If the action is null, nothing happens; if an Action<OnBeforeSendParameters> is passed, it gets called just before the crash report payload gets serialized and sent to Raygun. The arguments to the action are of type Struct OnBeforeSendArguments; they are passed to the action when it is called and contain references to the following objects passed by the Raygun client object:

// Abstracted away version of the struct to just show the properties
struct OnBeforeSendArguments
{
    System.Exception Exception;
    Mindscape.Raygun4Net.Messages.RaygunMessage RaygunMessage;
}

The provided action can read and/or modify their properties accordingly to produce the desired effect. For example, one can change the MachineName property in the Details of the RaygunMessage as follows:

Log.Logger = new LoggerConfiguration()
   .MinimumLevel.Verbose()
   .WriteTo.Raygun(
       applicationKey: "paste_your_api_key_here",
       onBeforeSend: arguments => { 
           arguments.RaygunMessage.Details.MachineName = "MyMachine";
       })
   .CreateLogger();

Enrich with HTTP request and response data

This is only valid for .NET Standard 2.0 and above projects.

In full framework, ASP.NET applications, the HTTP request and response are available to Raygun4Net through the HttpContext.Current accessor.

For .NET Core, this won't be avaliable. Therefore, you'll need to add the Serilog enricher using the WithHttpDataForRaygun method to capture the HTTP request and response data.

Configuration

All parameters to WithHttpDataForRaygun are optional.

Log.Logger = new LoggerConfiguration()
  .WriteTo.Raygun("paste_your_api_key_here")
  .Enrich.WithHttpDataForRaygun(
    new HttpContextAccessor(),
    LogEventLevel.Error,
    RaygunSettings)
  .CreateLogger();

When configuring using a JSON configuration file use the following example.

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Raygun"
    ],
    "Enrich": [
      {
        "Name": "WithHttpDataForRaygun",
        "Args": {
          "RaygunSettings": {
            "IsRawDataIgnored": true,
            "UseXmlRawDataFilter": true,
            "IsRawDataIgnoredWhenFilteringFailed": true,
            "UseKeyValuePairRawDataFilter": true,
            "IgnoreCookieNames": ["CookieName"],
            "IgnoreHeaderNames": ["HeaderName"],
            "IgnoreFormFieldNames": ["FormFieldName"],
            "IgnoreQueryParameterNames": ["QueryParameterName"],
            "IgnoreSensitiveFieldNames": ["SensitiveFieldNames"],
            "IgnoreServerVariableNames": ["ServerVariableName"]
          }
        }
      }
    ]
  }
}

Raygun4Net features configured via RaygunSettings

This sink wraps the Raygun4Net provider to build a crash report from an Exception and send it to Raygun. This makes the following Raygun4Net features available to you. To use these features, you need to add RaygunSettings to your configuration as explained below which is separate to the Serilog configuration.

.NET Framework

Add the following section within the configSections element of your app.config or web.config file.

<section name="RaygunSettings" type="Mindscape.Raygun4Net.RaygunSettings, Mindscape.Raygun4Net"/>

Then add a RaygunSettings element containing the desired settings somewhere within the configuration element of the app.config or web.config file.

<RaygunSettings setting="value"/>

ThrowOnError

type: bool

default: false

This is false by default. Which means that any exception that occur within Raygun4Net itself will be silently caught. Setting this to true will allow any exceptions occurring in Raygun4Net to be thrown, which can help debug issues with Raygun4Net if crash reports aren't showing up in Raygun.

IgnoreSensitiveFieldNames

type: string[]

default: null

Crash reports sent to Raygun from this Serilog sink will include HTTP context details if present. (Currently only supported in .NET Framework applications). IgnoreSensitiveFieldNames lets you specify a list of HTTP query parameters, form fields, headers, cookies and server variables that you do not want to be sent to Raygun. Additionally, entries in this setting will be attempted to be stripped out of the raw request payload (more options for controlling this are explained in the IsRawDataIgnored section below).

Setting IgnoreSensitiveFieldNames to a list that only contains "*" will cause none of these things to be sent to Raygun. Placing * before, after or at both ends of an entry will perform an ends-with, starts-with or contains operation respectively.

Individual options are also available which function in the same way as IgnoreSensitiveFieldNames: IgnoreQueryParameterNames, IgnoreFormFieldNames, IgnoreHeaderNames, IgnoreCookieNames and IgnoreServerVariableNames.

The IgnoreFormFieldNames entries will also strip out specified values from the raw request payload if it is multipart/form-data.

IsRawDataIgnored

type: bool

default: false

By default, Raygun crash reports will capture the raw request payload of the current HTTP context if present. (Currently only supported in .NET Framework applications). If you would not like to include raw request payloads on crash reports sent to Raygun, then you can set IsRawDataIgnored to true.

If you do want to include the raw request payload, but want to filter out sensitive fields, then you can use the IgnoreSensitiveFieldNames options described above. You'll also need to specify how the fields should be stripped from the raw request payload. Set UseXmlRawDataFilter to true for XML payloads or/and set UseKeyValuePairRawDataFilter to true for payloads of the format "key1=value1&key2=value2".

Setting IsRawDataIgnoredWhenFilteringFailed to true will cause the entire raw request payload to be ignored in cases where specified sensitive values fail to be stripped out.

CrashReportingOfflineStorageEnabled

type: bool

default: true

Only available in .NET Framework applications. This is true by default which will cause crash reports to be saved to isolated storage (if possible) in cases where they fail to be sent to Raygun. This option lets you disable this functionality by setting it to false. When enabled, a maximum of 64 crash reports can be saved. This limit can be set lower than 64 via the MaxCrashReportsStoredOffline option.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net46 is compatible.  net461 is compatible.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Serilog.Sinks.Raygun:

Package Downloads
UniLogger

Logger for MVC and Core applications

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
8.0.0 5,287 8/25/2024
7.6.0-pre-1 224 8/13/2024
7.5.0 29,023 2/12/2024
7.5.0-pre-1 105 2/1/2024
7.4.0 17,651 1/22/2024
7.4.0-pre-1 107 1/17/2024
7.3.0 9,165 11/14/2023
7.3.0-pre-2 142 11/10/2023
7.3.0-pre-1 143 11/10/2023
7.2.0-pre-1 146 10/25/2023
7.1.0 7,222 10/9/2023
7.0.0 625 9/21/2023
7.0.0-pre-2 157 9/20/2023
7.0.0-pre-1 125 9/15/2023
5.3.3 31,908 6/15/2023
5.3.1 19,407 5/18/2023
5.3.0 1,648 4/28/2023
5.2.0 1,997 3/29/2023
5.1.1 135,031 3/3/2022
5.1.1-dev-00108 197 3/3/2022
5.1.1-dev-00107 184 3/3/2022
5.1.0 1,955 2/4/2022
5.1.0-dev-00102 180 2/4/2022
5.0.3-dev-00101 189 2/4/2022
5.0.3-dev-00097 188 1/16/2022
5.0.3-dev-00089 355 6/22/2021
5.0.2 406,655 6/21/2021
5.0.2-dev-00086 265 6/21/2021
5.0.2-dev-00083 308 6/21/2021
5.0.1 442,908 10/26/2020
5.0.1-dev-00074 416 10/26/2020
5.0.0 642 10/26/2020
4.0.1-dev-00070 386 10/26/2020
4.0.1-dev-00056 415 10/1/2020
4.0.1-dev-00048 401 9/1/2020
4.0.1-dev-00045 412 8/16/2020
4.0.1-dev-00040 361 8/10/2020
4.0.1-dev-00039 377 8/10/2020
4.0.1-dev-00038 367 8/10/2020
4.0.0 291,949 2/18/2020
4.0.0-dev-00029 5,333 7/16/2019
3.0.1-dev-00026 28,713 9/5/2018
3.0.1-dev-00024 1,202 7/13/2018
3.0.1-dev-00022 827 5/9/2018
3.0.1-dev-00021 3,953 4/30/2018
3.0.0 723,675 12/6/2017
2.0.15 37,628 5/22/2017
2.0.13 15,001 1/12/2017
1.5.10 10,728 9/30/2016
1.5.8 17,657 12/16/2015
1.5.6 4,121 5/14/2015
1.5.3 1,708 4/1/2015
1.5.2 1,201 3/30/2015
1.5.1 1,165 3/27/2015
1.4.196 1,672 2/22/2015
1.4.182 1,440 2/15/2015
1.4.168 1,295 2/8/2015
1.4.155 1,148 2/1/2015
1.4.139 1,206 1/23/2015
1.4.118 1,207 1/13/2015
1.4.113 1,135 1/6/2015
1.4.102 1,476 12/21/2014
1.4.99 2,001 12/18/2014
1.4.97 1,474 12/18/2014
1.4.76 1,402 12/8/2014
1.4.39 1,737 11/26/2014
1.4.34 1,331 11/24/2014
1.4.28 1,296 11/24/2014
1.4.27 1,323 11/23/2014
1.4.23 1,382 11/21/2014
1.4.21 1,313 11/21/2014
1.4.18 1,539 11/18/2014
1.4.15 2,230 11/4/2014
1.4.14 1,229 10/23/2014
1.4.13 1,153 10/23/2014
1.4.12 1,223 10/12/2014
1.4.11 1,198 10/8/2014
1.4.10 1,168 9/26/2014
1.4.9 1,183 9/17/2014
1.4.8 1,152 9/11/2014
1.4.7 1,177 9/1/2014
1.4.6 1,127 8/31/2014
1.4.5 1,167 8/27/2014
1.4.4 1,208 8/27/2014
1.4.3 1,253 8/25/2014
1.4.2 1,211 8/23/2014
1.4.1 1,189 8/23/2014
1.3.43 1,269 8/4/2014
1.3.42 1,159 7/30/2014
1.3.41 1,155 7/28/2014
1.3.40 1,144 7/26/2014
1.3.39 1,188 7/25/2014
1.3.36 1,173 7/20/2014
1.3.35 1,169 7/17/2014
1.3.34 1,187 7/6/2014
1.3.33 1,194 6/30/2014
1.3.30 1,216 6/19/2014
1.3.29 1,247 6/19/2014
1.3.28 1,188 6/19/2014
1.3.27 1,153 6/18/2014
1.3.25 1,222 6/9/2014
1.3.24 1,213 5/21/2014
1.3.23 1,172 5/20/2014
1.3.20 1,216 5/18/2014
1.3.19 1,256 5/17/2014
1.3.18 1,204 5/17/2014
1.3.17 1,331 5/17/2014
1.3.16 1,164 5/17/2014
1.3.15 1,196 5/16/2014
1.3.14 1,201 5/16/2014
1.3.13 1,236 5/16/2014
1.3.12 1,202 5/14/2014