raygun4net
Raygun提供商.NET框架
支持的平台/框架
支持使用以下框架构建的项目:
- .NET 4.6.2+,最多.NET 8.0
- asp.net
- ASP.NET MVC
- ASP.NET WebAPI
- Winforms,WPF,控制台应用等
- Xamarin.ios和Xamarin.mac(统一和经典)
- Xamarin.android
将Nuget软件包安装到使用上述框架之一的项目中,并将参考正确的组件。
对于Xamarin,我们建议添加raygun4xamarin.forms或Mindscape。 raygun4net .xamarin.android&Mindscape。 raygun4net .xamarin.ios.unified软件包。
对于.NET Core和.NET版本5.0或更高版本,我们建议使用思维景观。 raygun4net .netcore软件包。
安装
- 安装此提供商的最简单方法是使用以下dotnet CLI命令,或在使用IDE中的Nuget Management GUI中。
dotnet add package Mindscape. raygun4net
有关如何使用此提供商的更详细说明,请参见Raygun文档。
我的应用API键在哪里?
在向Raygun服务发送异常时,需要将APPI键映射到您的应用程序。
当您在Raygun仪表板上创建新应用程序时,您的应用程序API键将显示在说明页面中。您还可以通过单击Raygun仪表板侧栏中的“应用程序设置”按钮来找到API键。
名称空间
主要类可以在思维景观中找到。 raygun4net名称空间。
用法
raygun4net提供商包括对许多.NET框架的支持。向下滚动以查找有关将Raygun用于您的应用程序类型的信息。
ASP.NET 5+
从5.0.0版本开始,ASP.NET支持已移至新的Nuget软件包中。如果您有一个ASP.NET项目,请卸载raygun4net Nuget软件包并安装Mindscape。 raygun4net .aspnetcore nuget软件包。
安装软件包后,将以下代码添加到您的appSettings.json(如果您使用的是其他类型的配置,请在此处添加):
\"RaygunSettings\" : { \"ApiKey\" : \" YOUR_APP_API_KEY \" }
将Raygun中间件配置为处理已触发并自动发送异常的异常。
在Program.cs :
-
using Mindscape. raygun4net .AspNetCore;对您的使用语句。 - 添加
builder.Services.AddRaygun(builder.Configuration);。 - 添加
app.UseRaygun();在任何其他app.UseDeveloperExceptionPage()app.UseExceptionHandler(\"/Home/Error\")之后
using Mindscape . raygun4net . AspNetCore ;
var builder = WebApplication . CreateBuilder ( args ) ; // Add services to the container. builder . Services . AddRaygun ( builder . Configuration ) ; /*The rest of your builder setup*/ var app = builder . Build ( ) ; // Configure the HTTP request pipeline. if ( ! app . Environment . IsDevelopment ( ) ) { app . UseExceptionHandler ( \"/Error\" ) ; // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka*.ms**/aspnetcore-hsts. app . UseHsts ( ) ; } app . MapGet ( \"/throw\" , ( Func < string > ) ( ( ) => throw new Exception ( \"Exception in request pipeline\" ) ) ) ; app . UseRaygun ( ) ; /*The rest of your app setup*/
上述设置将导致所有未手动异常发送到您的Raygun帐户,您可以在其中轻松查看所有错误监视和崩溃报告数据。
.NET 3.5或更早的TLS配置
Raygun的摄入节点需要TLS 1.2或TLS 1.3如果使用.NET 3.5或更早,则可能需要在应用程序中启用这些协议并修补OS。
查看Microsoft的TLS故障排除指南的建议。
在您的应用程序的启动代码中更新协议属性。
protected void Application_Start ( ) { // Enable TLS 1.2 and TLS 1.3 ServicePointManager . SecurityProtocol |= ( ( SecurityProtocolType ) 3072 /*TLS 1.2*/ | ( SecurityProtocolType ) 12288 /*TLS 1.3*/ ) ; }
ASP.NET框架
在您的web.config文件中,查找或添加<configSections>元素,该元素应嵌套在<configuration>元素下,并添加以下条目:
raygun4net \”/>\”>
<section name=\"RaygunSettings\" type=\"Mindscape. raygun4net .RaygunSettings, Mindscape. raygun4net \"/>
然后,通过在configSections标签之后的某个地方添加以下行来引用它。
< RaygunSettings apikey = \" YOUR_APP_API_KEY \" />
现在,您可以设置Raygun自动发送未经手的异常,也可以手动发送异常。
要自动发送未经处理的异常,请在web.config中的<configuration>元素中使用Raygun HTTP模块。根据您使用的IIS版本,这对此略有不同。如有疑问,请尝试两者:
raygun4net.RaygunHttpModule\”/>
</httpModules>
</system.web>\”>
< system .web> < httpModules > < add name = \" RaygunErrorModule \" type = \" Mindscape. raygun4net .RaygunHttpModule \" /> </ httpModules > </ system .web>
对于IIS 7.0,使用system.webServer
raygun4net.RaygunHttpModule\”/>
</modules>
</system.webServer>\”>
< system .webServer> < modules > < add name = \" RaygunErrorModule \" type = \" Mindscape. raygun4net .RaygunHttpModule \" /> </ modules > </ system .webServer>
代码中的任何位置,您还可以通过创建RayGunClient的新实例并调用SendInbackground方法之一手动发送异常报告。这最常用于发送捕获/捕获块中捕获的异常。
try { } catch ( Exception e ) { new RaygunClient ( ) . SendInBackground ( e ) ; }
或在您自己的处理程序中发送异常,而不是使用上面的自动设置。
protected void Application_Error ( ) { var exception = Server . GetLastError ( ) ; new RaygunClient ( ) . Send ( exception ) ; }
其他ASP.NET配置选项
排除HTTP状态代码的错误
如果使用HTTP模块,则可以通过提供逗号分隔的状态代码列表以忽略配置中的逗号分隔列表,从而将错误排除。例如,如果要排除返回I i i taepot响应代码的错误,则可以使用以下配置。
< RaygunSettings apikey = \" YOUR_APP_API_KEY \" excludeHttpStatusCodes = \" 418 \" />
排除起源于本地起源的错误
如果请求起源于本地原点,则切换此布尔值和HTTP模块将不会向Raygun发送错误。即一种防止本地调试/开发的方法,而不必诉诸Web.config变换而通知Raygun。
< RaygunSettings apikey = \" YOUR_APP_API_KEY \" excludeErrorsFromLocal = \" true \" />
删除敏感请求数据
如果您希望在HTTP请求中具有敏感数据,以防止将其传输到Raygun,则可以提供可能删除的可能键(名称)的列表。可以在web.config中的raygunsettings标签上指定要忽略的密钥(如果您在代码中设置内容,则可以在RaygunClient上使用等效方法)。可用选项是:
- 忽略RoreFormFieldNames
- 忽略黑头
- 无知
- 忽略ver variablenames
这些可以设置为逗号分开的键列表,要忽略。设置一个选项为 *将指示所有密钥不会发送到Raygun。将 *放置在钥匙的两端之前,之后或在两端都将执行末端,分别与启动或包含操作。例如,iNAREFORMFIELDNAMES =“*密码*”将导致Raygun忽略名称中任何位置包含“密码”的所有表单字段。这些选项不敏感。
为HTTP模块提供自定义的射线电视机
有时,当使用HTTP模块自动发送Raygun时,您可能需要为HTTP模块提供自定义的RayGunClient实例,以便使用该文件末尾描述的一些可选功能。为此,请获取您的HTTP应用程序以实现Iraygunapplication接口。实现GeneratatRayGunClient方法,以返回新的(或先前创建的)RayGunClient实例。 HTTP模块将使用此方法返回的raygunclient发送未手持异常。在此方法中,您可以在您需要的RayGunClient实例上设置任何其他选项 – 有关每个功能的更多信息,请在此文件的末尾描述。
ASP.NET MVC
从4.0.0版开始,MVC支持已移至新的Nuget软件包中。如果您有一个MVC项目,请卸载raygun4net Nuget软件包并安装Mindscape. raygun4net .Mvc nuget软件包。
安装软件包后,有关配置的说明,请参见包装。
MVC和WebAPI Nuget软件包可以安全地安装在同一项目中。
ASP.NET Web API
从4.0.0版本开始,WebAPI支持已移至新的Nuget软件包中。如果您有一个WebAPI项目,请卸载raygun4net Nuget软件包并安装Mindscape. raygun4net .WebApi nuget软件包。
安装软件包后,有关配置的说明,请参见包装。
MVC和WebAPI Nuget软件包可以安全地安装在同一项目中。
WPF
通过在构造函数中传递应用程序API键来创建raygunclient的实例。将事件处理程序附加到应用程序的dispatcherunhandledException事件。如果使用处理程序,请使用raygunclient.send方法发送异常。
private RaygunClient _client = new RaygunClient ( \"YOUR_APP_API_KEY\" ) ; public App ( ) { DispatcherUnhandledException += OnDispatcherUnhandledException ; } void OnDispatcherUnhandledException ( object sender , DispatcherUnhandledExceptionEventArgs e ) { _client . Send ( e . Exception ) ; }
Winforms
通过在构造函数中传递应用程序API键来创建raygunclient的实例。将事件处理程序附加到application.threadexception事件之前,请在调用application.lun(…)。如果使用处理程序,请使用raygunclient.send方法发送异常。
private static readonly RaygunClient _raygunClient = new RaygunClient ( \"YOUR_APP_API_KEY\" ) ; [ STAThread ] static void Main ( ) { Application . EnableVisualStyles ( ) ; Application . SetCompatibleTextRenderingDefault ( false ) ; Application . ThreadException += new ThreadExceptionEventHandler ( Application_ThreadException ) ; Application . Run ( new Form1 ( ) ) ; } private static void Application_ThreadException ( object sender , ThreadExceptionEventArgs e ) { _raygunClient . Send ( e . Exception ) ; }
Winrt
在app.xaml.cs构造函数(或应用程序的任何主要入口点)中,使用API键调用static raygunclient.attach方法。
public App ( ) { RaygunClient . Attach ( \"YOUR_APP_API_KEY\" ) ; }
在调用附加方法后的任何时候,您都可以使用raygunclient.current获取静态实例。这可用于手动发送消息(通过发送方法)或更改选项,例如用户身份字符串。
Winrt UnhandledException事件的局限性和Wrap()解决方法
与更成熟的.NET框架中的选项相比,WINRT中可用于捕获未经手的异常的选项更加有限。除了在主UI线程上发生的其他运行时异常外,还将在解析无效的XAML时提出UnhandLeDException事件。尽管将以这种方式接收许多错误,因此可以将其发送到Raygun,但此例外处理程序将错过其他错误。特别是在背景线程上执行的异步代码或任务不会被捕获。
用wrap()方法为此问题提供了解决方法。这些允许您将要执行的代码传递到Raygun客户端的实例 – 它只会称其为被键入块包围。如果您输入的方法确实会导致抛出的例外,则会将其传输到Raygun,并且例外将再次抛出。有两个过载;一种用于返回void的方法,另一种用于返回对象的方法。
Fody
另一个选择是使用FODY库及其异步器扩展。这将自动捕获异步异常,并将其传递给您选择的处理程序(将其发送给Raygun如上所述)。请参阅此处的安装说明,然后查看示例项目的使用。
Xamarin用于Android
在应用程序的主要/输入活动中,使用static raygunclient.attach方法使用应用程序API键。附件方法还有一个过载,可让您通过用户身份字符串传递,该字符串可用于跟踪Raygun仪表板中的受影响用户。
RaygunClient . Attach ( \"YOUR_APP_API_KEY\" ) ;
在调用附加方法后的任何时候,您都可以使用raygunclient.current获取静态实例。这可用于手动发送消息或更改选项,例如用户身份字符串。
ios的Xamarin
在应用程序的主要入口处,使用static raygunclient.attach方法使用应用程序API键。
static void Main ( string [ ] args ) { RaygunClient . Attach ( \"YOUR_APP_API_KEY\" ) ; UIApplication . Main ( args , null , \"AppDelegate\" ) ; }
附件方法也有一个过载,可让您启用本机iOS崩溃报告。
static void Main ( string [ ] args ) { RaygunClient . Attach ( \"YOUR_APP_API_KEY\" , true , true ) ; UIApplication . Main ( args , null , \"AppDelegate\" ) ; }
第一个布尔参数仅仅是为了启用本机iOS错误报告。第二个布尔参数是是否劫持了一些本机信号 – 这是解决众所周知的iOS崩溃记者问题,其中try/catch块中的null引用异常会导致应用程序崩溃。通过将第二个布尔参数设置为true,托管代码将接管求解null参考问题的Sigbus和Sigsegv iOS信号。但是,这样做可以防止Sigbus和Sigsegv本地错误被检测到,这意味着它们不会被送到Raygun。这就是为什么我们将其作为选项提供的原因 – 因此,如果您在尝试/捕获块中发生的null参考异常没有任何问题,并且您想最大化可以通知的本机错误,则将第二个布尔参数设置为false。
在调用附加方法后的任何时候,您都可以使用raygunclient.current获取静态实例。这可用于手动发送消息或更改选项,例如用户身份字符串。
Xamarin用于Mac
在应用程序的主要入口处,使用static raygunclient.attach方法使用应用程序API键。
static void Main ( string [ ] args ) { RaygunClient . Attach ( \"YOUR_APP_API_KEY\" ) ; NSApplication . Init ( ) ; NSApplication . Main ( args ) ; }
在调用附加方法后的任何时候,您都可以使用raygunclient.current获取静态实例。这可用于手动发送消息或更改选项,例如用户身份字符串。
所有.NET框架的其他功能:
修改或取消消息
在RayGunClient实例上,将事件处理程序附加到SendingMessage事件。在RayGunClient发送异常之前,将调用此事件处理程序 – 自动或手动。事件参数提供即将发送的raygunmessage对象。此事件处理程序的一种用途是添加或修改有关RaygunMessage的任何信息。此方法的另一个用途是确定您永远不想发送到Raygun的异常,如果是,请设置E.Cancel = true以取消发送。
带状包装器例外
如果您的外部异常包含您希望通过的有价值的内部异常,则可以使用多参数方法来指定这些异常:
raygunClient . AddWrapperExceptions ( typeof ( TargetInvocationException ) ) ;
在这种情况下,如果发生靶标发音,将其将其删除并替换为原因的实际Interexception。请注意,httpunhandledException和targetInvocationException已经添加到包装器异常列表中;您不必手动添加这些。如果您有自己的自定义包装器异常,则此方法很有用,或者使用自己的包装器抛出异常。
受影响的用户跟踪
RayGunClient上有一个属性命名User ,您可以将其设置为当前用户的ID。这使您可以查看Raygun仪表板中每个错误的受影响用户的计数。
如果您想要有关用户的更多详细信息(以及在发布新的受影响的用户报告功能的能力),则可以将RayGunClient上的UserInfo属性设置为新的RaygunIdentifiermessage对象。该课程上有许多属性,可以帮助标识碰撞的用户。
确保遵守您公司使用此功能时遵循的任何隐私政策。
特性
唯一必需的字段是标识符。
Identifier是该用户系统的唯一标识符。
IsAnonymous是一个标志,指示用户是否已登录(或可识别)或匿名。匿名用户仍然可以具有唯一的标识符。
Email用户的电子邮件地址。如果您使用电子邮件地址来识别您的用户,请随时设置其电子邮件的标识符并留空,因为如果看起来像一个,我们将使用标识符作为电子邮件地址,并且未指定任何电子邮件地址。
FullName用户的全名。
FirstName用户的第一个(或首选)名称。
UUID设备标识符。可以用来识别跨设备的用户,或为许多用户打破的机器。
用法
raygunClient . User = \"user@email.com\" ; // OR raygunClient . UserInfo = new RaygunIdentifierMessage ( \"user@email.com\" ) { IsAnonymous = false , FullName = \"Robbie Raygun\" , FirstName = \"Robbie\" } ;
版本编号
默认情况下,Raygun将在每个报告中发送您的项目的汇编版本。
如果您需要提供自己的自定义版本值,则可以通过设置RayGunClient的ApplicationVersion属性(以XXXX为X为正整数)。
标签和自定义数据
在手动发送异常时,您还可以发送任意标签列表(字符串数组)和一个自定义数据集(任何对象的字典)。这可以使用各种发送和Sendinbackground方法过载来完成。
代理设置
raygun4net提供商使用默认的Windows代理设置(如Internet Explorer的连接选项卡或Web.config中的设置)时,将消息发送到Raygun API时。如果您的代理需要身份验证凭证,则可以在实例化raygunclient后通过设置ProxyCredentials属性来提供这些凭证,然后使用它来稍后发送:
var raygunClient = new RaygunClient ( ) { ProxyCredentials = new NetworkCredential ( \"user\" , \"password\" ) } ;
自定义分组键
如果需要,您可以提供自己的分组密钥。我们只建议您遇到的问题,错误未正确分组。
在RayGunClient实例上,将事件处理程序附加到CustomGroupingKey事件。在Raygun构建了RaygunMessage对象之后,将调用此事件处理程序,但是在调用SendingMessage事件之前。事件参数提供了即将发送的raygunmessage对象,以及触发它的原始异常。您可以使用自己喜欢生成密钥的任何东西,并通过事件参数上的CustomGroupingKey属性进行设置。将其设置为null或空字符串将使Raygun分组的异常,将其设置为某物将导致Raygun与已发送的其他例外进行分组。
钥匙的最大长度为100。
故障排除
raygun4net不会发送崩溃报告,也没有任何错误来帮助解决为什么会发生这种情况
- raygun4net的ThronError属性默认设置为false。第一件事是允许raygun4net中发生的任何错误将堆栈弹出并报告为未经处理的异常,因此请在raygun4net配置部分中添加此属性或在客户端的配置选项中启用它。
<RaygunSettings apikey=\"[ raygun4net api key goes here]\" throwOnError=\"true\"/> - 这些错误将开始转到活动查看器,或者您可以附加跟踪侦听器并将其记录到文本文件
- 可能不会发送崩溃报告的原因很多。如果错误消息提到“基础连接已封闭:发送中发生了意外错误。”这可能是TLS握手问题。通过检查内部异常或痕迹的其余部分来确认这一点,并查找密码不匹配短语。这清楚地表明存在TLS问题。 – 为了解决此添加以下全局配置,其中最方便的是global.asax servicepointManager.securityprotocol = securityPrototoColType.tls11 | SecurityProtocolType.tls12注意不要包括SSL3(例如SSL3)和TLS1.1的较不安全协议。
