Raygun提供商.NET框架
支持使用以下框架構建的項目:
將Nuget軟件包安裝到使用上述框架之一的項目中,並將參考正確的組件。
對於Xamarin,我們建議添加raygun4xamarin.forms或MindScape.Raygun4net.xamarin.android&MindScape.Raygun4net.xamarin.ios。
對於.NET Core和.NET版本5.0或更高版本,我們建議使用MindScape.RayGun4net.netcore軟件包。
dotnet add package Mindscape.Raygun4Net有關如何使用此提供商的更詳細說明,請參見Raygun文檔。
在向Raygun服務發送異常時,需要將APPI鍵映射到您的應用程序。
當您在Raygun儀表板上創建新應用程序時,您的應用程序API鍵將顯示在說明頁面中。您還可以通過單擊Raygun儀表板側欄中的“應用程序設置”按鈕來找到API鍵。
主要類可以在MindScape.Raygun4net名稱空間中找到。
Raygun4net提供商包括對許多.NET框架的支持。向下滾動以查找有關將Raygun用於您的應用程序類型的信息。
從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帳戶,您可以在其中輕鬆查看所有錯誤監視和崩潰報告數據。
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*/ ) ;
}在您的web.config文件中,查找或添加<configSections>元素,該元素應嵌套在<configuration>元素下,並添加以下條目:
<section name="RaygunSettings" type="Mindscape.Raygun4Net.RaygunSettings, Mindscape.Raygun4Net"/>
然後,通過在configSections標籤之後的某個地方添加以下行來引用它。
< RaygunSettings apikey = " YOUR_APP_API_KEY " />現在,您可以設置Raygun自動發送未經手的異常,也可以手動發送異常。
要自動發送未經處理的異常,請在web.config中的<configuration>元素中使用Raygun HTTP模塊。根據您使用的IIS版本,這對此略有不同。如有疑問,請嘗試兩者:
< system .web>
< httpModules >
< add name = " RaygunErrorModule " type = " Mindscape.Raygun4Net.RaygunHttpModule " />
</ httpModules >
</ system .web>對於IIS 7.0,使用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 ) ;
} 排除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上使用等效方法)。可用選項是:
這些可以設置為逗號分開的鍵列表,要忽略。設置一個選項為 *將指示所有密鑰不會發送到Raygun。將 *放置在鑰匙的兩端之前,之後或在兩端都將執行末端,分別與啟動或包含操作。例如,iNAREFORMFIELDNAMES =“*密碼*”將導致Raygun忽略名稱中任何位置包含“密碼”的所有表單字段。這些選項不敏感。
為HTTP模塊提供自定義的射線電視機
有時,當使用HTTP模塊自動發送Raygun時,您可能需要為HTTP模塊提供自定義的RayGunClient實例,以便使用該文件末尾描述的一些可選功能。為此,請獲取您的HTTP應用程序以實現Iraygunapplication接口。實現GeneratatRayGunClient方法,以返回新的(或先前創建的)RayGunClient實例。 HTTP模塊將使用此方法返回的raygunclient發送未手持異常。在此方法中,您可以在您需要的RayGunClient實例上設置任何其他選項 - 有關每個功能的更多信息,請在此文件的末尾描述。
從4.0.0版開始,MVC支持已移至新的Nuget軟件包中。如果您有一個MVC項目,請卸載raygun4net nuget軟件包,然後安裝Mindscape.Raygun4Net.Mvc nuget軟件包。
安裝軟件包後,有關配置的說明,請參見包裝。
MVC和WebAPI Nuget軟件包可以安全地安裝在同一項目中。
從4.0.0版本開始,WebAPI支持已移至新的Nuget軟件包中。如果您有一個WebAPI項目,請卸載Raygun4net Nuget軟件包,然後安裝Mindscape.Raygun4Net.WebApi Nuget軟件包。
安裝軟件包後,有關配置的說明,請參見包裝。
MVC和WebAPI Nuget軟件包可以安全地安裝在同一項目中。
通過在構造函數中傳遞應用程序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 ) ;
}通過在構造函數中傳遞應用程序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 ) ;
}在app.xaml.cs構造函數(或應用程序的任何主要入口點)中,使用API鍵調用static raygunclient.attach方法。
public App ( )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
}在調用附加方法後的任何時候,您都可以使用raygunclient.current獲取靜態實例。這可用於手動發送消息(通過發送方法)或更改選項,例如用戶身份字符串。
與更成熟的.NET框架中的選項相比,WINRT中可用於捕獲未經手的異常的選項更加有限。除了在主UI線程上發生的其他運行時異常外,還將在解析無效的XAML時提出UnhandLeDException事件。儘管將以這種方式接收許多錯誤,因此可以將其發送到Raygun,但此例外處理程序將錯過其他錯誤。特別是在背景線程上執行的異步代碼或任務不會被捕獲。
用wrap()方法為此問題提供了解決方法。這些允許您將要執行的代碼傳遞到Raygun客戶端的實例 - 它只會稱其為被鍵入塊包圍。如果您輸入的方法確實會導致拋出的例外,則會將其傳輸到Raygun,並且例外將再次拋出。有兩個過載;一種用於返回void的方法,另一種用於返回對象的方法。
另一個選擇是使用FODY庫及其異步器擴展。這將自動捕獲異步異常,並將其傳遞給您選擇的處理程序(將其發送給Raygun如上所述)。請參閱此處的安裝說明,然後查看示例項目的使用。
在應用程序的主要/輸入活動中,使用static raygunclient.attach方法使用應用程序API鍵。附件方法還有一個過載,可讓您通過用戶身份字符串傳遞,該字符串可用於跟踪Raygun儀表板中的受影響用戶。
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;在調用附加方法後的任何時候,您都可以使用raygunclient.current獲取靜態實例。這可用於手動發送消息或更改選項,例如用戶身份字符串。
在應用程序的主要入口處,使用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獲取靜態實例。這可用於手動發送消息或更改選項,例如用戶身份字符串。
在應用程序的主要入口處,使用static raygunclient.attach方法使用應用程序API鍵。
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
NSApplication . Init ( ) ;
NSApplication . Main ( args ) ;
}在調用附加方法後的任何時候,您都可以使用raygunclient.current獲取靜態實例。這可用於手動發送消息或更改選項,例如用戶身份字符串。
在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 = "[email protected]" ;
// OR
raygunClient . UserInfo = new RaygunIdentifierMessage ( "[email protected]" )
{
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。
<RaygunSettings apikey="[Raygun4Net api key goes here]" throwOnError="true"/>