Proveedor de Raygun para .NET Framework
Se admiten proyectos creados con los siguientes marcos:
Instale el paquete Nuget en un proyecto que use uno de los marcos anteriores y se referenciará el ensamblaje correcto.
Para Xamarin recomendamos agregar raygun4xamarin.forms, o el mentalscape.raygun4net.xamarin.android & mindscape.raygun4net.xamarin.ios.unificó paquetes.
Para las versiones de .NET Core y .NET 5.0 o superior, recomendamos usar el paquete MindScape.Raygun4net.netcore.
dotnet add package Mindscape.Raygun4NetConsulte los documentos de Raygun para obtener instrucciones más detalladas sobre cómo usar este proveedor.
Al enviar excepciones al servicio Raygun, se requiere una clave API de la aplicación para asignar los mensajes a su aplicación.
Cuando crea una nueva aplicación en su tablero de raygun, la tecla API de su aplicación se muestra dentro de la página de instrucciones. También puede encontrar la tecla API haciendo clic en el botón "Configuración de la aplicación" en la barra lateral del tablero Raygun.
Las clases principales se pueden encontrar en el espacio de nombres Mindscape.Raygun4net.
El proveedor de RayGun4Net incluye soporte para muchos marcos .NET. Desplácese hacia abajo para encontrar información sobre el uso de Raygun para su tipo de aplicación.
A partir de la versión 5.0.0, el soporte ASP.NET se ha trasladado a un nuevo paquete Nuget. Si tiene un proyecto ASP.NET, desinstale el paquete Raygun4net Nuget e instale el paquete MindsCape.Raygun4net.aspnetcore Nuget.
Una vez que se instale el paquete, agregue el siguiente código a su AppSettings.json (si está utilizando otro tipo de configuración, agrégalo allí):
"RaygunSettings" : {
"ApiKey" : " YOUR_APP_API_KEY "
}Configure el middleware de Raygun para manejar excepciones que se han activado y envíen excepciones no controladas automáticamente.
En Program.cs :
using Mindscape.Raygun4Net.AspNetCore; a sus declaraciones de uso.builder.Services.AddRaygun(builder.Configuration); .app.UseRaygun(); Después de cualquier otro método de manejo de excepciones, por ejemplo, app.UseDeveloperExceptionPage() o 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*/La configuración anterior hará que todas las excepciones no controladas se envíen a su cuenta de Raygun, donde puede ver fácilmente todos los datos de monitoreo y bloqueo de errores.
Los nodos de ingestión de Raygun requieren TLS 1.2 o TLS 1.3 Si está utilizando .NET 3.5 o antes , es posible que deba habilitar estos protocolos en su aplicación y parche su sistema operativo.
Consulte la Guía de solución de problemas de TLS de Microsoft para obtener sus recomendaciones.
Actualización de la propiedad del protocolo en el código de inicio de su aplicación.
protected void Application_Start ( )
{
// Enable TLS 1.2 and TLS 1.3
ServicePointManager . SecurityProtocol |= ( ( SecurityProtocolType ) 3072 /*TLS 1.2*/ | ( SecurityProtocolType ) 12288 /*TLS 1.3*/ ) ;
} En su archivo web.config, busque o agregue un elemento <configSections> , que debe anidadarse en el elemento <configuration> y agregue la siguiente entrada:
<section name="RaygunSettings" type="Mindscape.Raygun4Net.RaygunSettings, Mindscape.Raygun4Net"/>
Luego, haga referencia al agregar la siguiente línea en algún lugar después de la etiqueta configSections .
< RaygunSettings apikey = " YOUR_APP_API_KEY " />Ahora puede configurar Raygun para enviar excepciones no controladas automáticamente o/y enviar excepciones manualmente.
Para enviar excepciones no controladas automáticamente, use el módulo Raygun HTTP dentro del elemento <configuration> en Web.Config. Esto se hace de manera ligeramente diferente dependiendo de la versión de IIS que esté utilizando. En caso de duda, solo pruébalos a ambos:
< system .web>
< httpModules >
< add name = " RaygunErrorModule " type = " Mindscape.Raygun4Net.RaygunHttpModule " />
</ httpModules >
</ system .web> Para IIS 7.0, use system.webServer
< system .webServer>
< modules >
< add name = " RaygunErrorModule " type = " Mindscape.Raygun4Net.RaygunHttpModule " />
</ modules >
</ system .webServer>En cualquier lugar de su código, también puede enviar informes de excepción manualmente simplemente creando una nueva instancia del RayGunClient y llamar a uno de los métodos Enviar o SendEnbackground. Esto se usa más comúnmente para enviar excepciones capturadas en un bloque de try/captación.
try
{
}
catch ( Exception e )
{
new RaygunClient ( ) . SendInBackground ( e ) ;
}O para enviar excepciones en sus propios manejadores en lugar de usar la configuración automática anterior.
protected void Application_Error ( )
{
var exception = Server . GetLastError ( ) ;
new RaygunClient ( ) . Send ( exception ) ;
} Excluir errores por código de estado HTTP
Si usa el módulo HTTP, puede excluir errores mediante su código de estado HTTP proporcionando una lista separada por comas de códigos de estado para ignorar en la configuración. Por ejemplo, si desea excluir errores que devuelvan el código de respuesta de I'm A Tapot, podría usar la configuración a continuación.
< RaygunSettings apikey = " YOUR_APP_API_KEY " excludeHttpStatusCodes = " 418 " />Excluir errores que se originan a partir de un origen local
Alternar este booleano y el módulo HTTP no enviará errores a Raygun si la solicitud se originó en un origen local. es decir, una forma de evitar que la depuración/desarrollo local notifique a Raygun sin tener que recurrir a las transformaciones web.config.
< RaygunSettings apikey = " YOUR_APP_API_KEY " excludeErrorsFromLocal = " true " />Eliminar datos de solicitud confidenciales
Si tiene datos confidenciales en una solicitud HTTP que desea evitar ser transmitido a Raygun, puede proporcionar listas de posibles claves (nombres) para eliminar. Las teclas para ignorar se pueden especificar en la etiqueta RayGunsettings en Web.Config, (o puede usar los métodos equivalentes en RayGunClient si está configurando las cosas en el código). Las opciones disponibles son:
Estos se pueden establecer para ser una lista de llaves separadas por coma para ignorar. Configurar una opción como * indicará que todas las claves no se enviarán a Raygun. Colocar * antes, después o en ambos extremos de una llave realizará un extremos, con inicio o contiene operación respectivamente. Por ejemplo, IgnoreFormFieldNames = "*contraseña*" hará que Raygun ignore todos los campos de formulario que contienen "contraseña" en cualquier lugar del nombre. Estas opciones no son sensibles a las carcajas.
Proporcionar un raygunclient personalizado al módulo HTTP
A veces, al configurar Raygun usando el módulo HTTP para enviar excepciones automáticamente, es posible que deba proporcionar al módulo HTTP una instancia de RayGunClient personalizada para usar parte de la función opcional descrita al final de este archivo. Para hacer esto, obtenga su aplicación HTTP para implementar la interfaz IRAYgunApplication. Implemente el método GeneraterAyGunClient para devolver una nueva instancia de RayGunClient (o previamente creada). El módulo HTTP utilizará el RayGunClient devuelto de este método para enviar las excepciones no controladas. En este método, puede configurar cualquier opción adicional en la instancia de RayGunClient que necesita: al final de este archivo se describe más información sobre cada característica.
A partir de la versión 4.0.0, el soporte de MVC se ha trasladado a un nuevo paquete Nuget. Si tiene un proyecto MVC, desinstale el paquete Raygun4net Nuget e instale el paquete Mindscape.Raygun4Net.Mvc Nuget.
Una vez que se instale el paquete, consulte el paquete Readme para obtener instrucciones sobre la configuración.
Los paquetes MVC y Webapi Nuget se pueden instalar en el mismo proyecto de forma segura.
A partir de la versión 4.0.0, el soporte de WebAPI se ha trasladado a un nuevo paquete Nuget. Si tiene un proyecto WebAPI, desinstale el paquete Raygun4net Nuget e instale el paquete Mindscape.Raygun4Net.WebApi Nuget.
Una vez que se instale el paquete, consulte el paquete Readme para obtener instrucciones sobre la configuración.
Los paquetes MVC y Webapi Nuget se pueden instalar en el mismo proyecto de forma segura.
Cree una instancia de RayGunClient pasando la tecla API de su aplicación en el constructor. Adjunte un manejador de eventos al evento despachador -MandledException de su solicitud. En el controlador de eventos, use el método RayGunClient.send para enviar la excepción.
private RaygunClient _client = new RaygunClient ( "YOUR_APP_API_KEY" ) ;
public App ( )
{
DispatcherUnhandledException += OnDispatcherUnhandledException ;
}
void OnDispatcherUnhandledException ( object sender , DispatcherUnhandledExceptionEventArgs e )
{
_client . Send ( e . Exception ) ;
}Cree una instancia de RayGunClient pasando la tecla API de su aplicación en el constructor. Adjunte un controlador de eventos al evento Aplication.ThreadException antes de llamar a Application.run (...). En el controlador de eventos, use el método RayGunClient.send para enviar la excepción.
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 ) ;
}En el constructor app.xaml.cs (o cualquier punto de entrada principal a su aplicación), llame al método static raygunclient.attach usando su clave API.
public App ( )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
}En cualquier punto después de llamar al método de fijación, puede usar RayGunClient.Current para obtener la instancia estática. Esto se puede utilizar para enviar mensajes manualmente (a través de los métodos de envío) o cambiar de opciones como la cadena de identidad del usuario.
Las opciones disponibles en WinRT para atrapar excepciones no controladas en este momento son más limitadas en comparación con las opciones en el marco .NET más maduro. El evento no handledException se planteará cuando se analice XAML inválido, además de otras excepciones de tiempo de ejecución que ocurren en el hilo de la interfaz de usuario principal. Si bien se recogerán muchos errores de esta manera y, por lo tanto, podrán enviarse a Raygun, este controlador de excepción perderá otros. En particular, el código o tareas asincrónicas que se ejecutan en hilos de fondo no tendrán sus excepciones atrapadas.
Se proporciona una solución para este problema con el método wrap (). Estos le permiten pasar el código que desea ejecutar a una instancia del cliente Raygun; simplemente lo llamará rodeado por un bloque de captura de try. Si el método en el que se transmite da como resultado una excepción que se lanza, esto se transmitirá a Raygun, y la excepción se arrojará nuevamente. Hay dos sobrecargas disponibles; uno para los métodos que devuelven nulo y otro para los métodos que devuelven un objeto.
Otra opción es usar la biblioteca Fody y su extensión AsyncerrorHandler. Esto atrapará automáticamente las excepciones de Async y las pasará a un controlador de su elección (que se enviaría a Raygun como se indicó anteriormente). Consulte las instrucciones de instalación aquí, luego consulte el proyecto de muestra sobre cómo usar.
En la actividad principal/de entrada de su aplicación, use el método static raygunclient.attach utilizando la clave de la API de su aplicación. También hay una sobrecarga para el método de adjunta que le permite pasar en una cadena de identidad de usuario que es útil para rastrear a los usuarios afectados en su tablero de raygun.
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;En cualquier punto después de llamar al método de fijación, puede usar RayGunClient.Current para obtener la instancia estática. Esto se puede usar para enviar mensajes manualmente o cambiar opciones como la cadena de identidad del usuario.
En el punto de entrada principal de la aplicación, use el método Static RayGunClient.attach utilizando la tecla API de su aplicación.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
UIApplication . Main ( args , null , "AppDelegate" ) ;
}También hay una sobrecarga para el método de fijación que le permite habilitar los informes nativos de bloqueo iOS.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" , true , true ) ;
UIApplication . Main ( args , null , "AppDelegate" ) ;
}El primer parámetro booleano es simplemente habilitar el informe de error iOS nativo. El segundo parámetro booleano es si o no secuestrar algunas de las señales nativas, esto es para resolver el conocido problema del reportero del bloqueo de iOS donde las excepciones de referencia nula dentro de un bloque de try/captación pueden hacer que la aplicación se bloquee. Al establecer el segundo parámetro booleano en verdadero, el código administrado se hará cargo de las señales Sigbus y SigseGV iOS que resuelve el problema de referencia nula. Sin embargo, hacer esto evita que se detecten errores nativos de Sigbus y Sigsegv, lo que significa que no son enviados a Raygun. Es por eso que proporcionamos esto como una opción, por lo que si no tiene ningún problema con las excepciones de referencia nulas que ocurren dentro de los bloques de prueba/captura y desea maximizar los errores nativos de los que puede ser notificado, luego establezca el segundo parámetro booleano en falso.
En cualquier punto después de llamar al método de fijación, puede usar RayGunClient.Current para obtener la instancia estática. Esto se puede usar para enviar mensajes manualmente o cambiar opciones como la cadena de identidad del usuario.
En el punto de entrada principal de la aplicación, use el método Static RayGunClient.attach utilizando la tecla API de su aplicación.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
NSApplication . Init ( ) ;
NSApplication . Main ( args ) ;
}En cualquier punto después de llamar al método de fijación, puede usar RayGunClient.Current para obtener la instancia estática. Esto se puede usar para enviar mensajes manualmente o cambiar opciones como la cadena de identidad del usuario.
En una instancia de RayGunClient, adjunte un controlador de eventos al evento SendingMessage. Este controlador de eventos se llamará justo antes de que RayGunClient envíe una excepción, ya sea de forma automática o manual. Los argumentos del evento proporcionan el objeto Raygunmessage que está a punto de ser enviado. Un uso para este controlador de eventos es agregar o modificar cualquier información sobre RayGunMessage. Otro uso para este método es identificar excepciones que nunca desea enviar a Raygun, y de ser así, configure E.Cancel = verdadero para cancelar el envío.
Si tiene excepciones externas comunes que envuelven una valiosa excepción interna que preferiría agrupar, puede especificarlas utilizando el método de parámetro múltiple:
raygunClient . AddWrapperExceptions ( typeof ( TargetInvocationException ) ) ;En este caso, si se produce una Excepción TargetInvocation, se eliminará y se reemplazará con la Innerexcepción real que fue la causa. Tenga en cuenta que httpunhandledException y TargetInVocationException ya se agregan a la lista de excepciones de envoltura; No tiene que agregarlos manualmente. Este método es útil si tiene sus propias excepciones de envoltura personalizada, o un marco está lanzando excepciones utilizando su propio envoltorio.
Hay una propiedad llamada User en RayGunClient que puede establecer para ser la ID actual del usuario. Esto le permite ver el recuento de usuarios afectados para cada error en el tablero de raygun.
Si desea información más detallada sobre los usuarios (y la capacidad de utilizar la nueva función de informe del usuario afectada cuando se publica), puede establecer la propiedad UserInfo en RayGunClient en un nuevo objeto RayGunIdentiMessage. Esta clase tiene una serie de propiedades para ayudar a identificar al usuario que experimentó un bloqueo.
Asegúrese de cumplir con las políticas de privacidad que su empresa siga cuando use esta función.
El único campo requerido es el identificador.
Identifier es el identificador único de su sistema para este usuario.
IsAnonymous es una bandera que indica si el usuario está conectado (o identificable) o si es anónimo. Un usuario anónimo aún puede tener un identificador único.
Email a la dirección de correo electrónico del usuario. Si usa direcciones de correo electrónico para identificar a sus usuarios, no dude en establecer el identificador en su correo electrónico y dejar esto en blanco, ya que usaremos el identificador como la dirección de correo electrónico si parece una, y no se especifica ninguna dirección de correo electrónico.
FullName el nombre completo del usuario.
FirstName primer nombre del nombre del usuario (o preferido).
UUID Un identificador de dispositivo. Podría usarse para identificar a los usuarios en todos los dispositivos o máquinas que se están rompiendo para muchos usuarios.
raygunClient . User = "[email protected]" ;
// OR
raygunClient . UserInfo = new RaygunIdentifierMessage ( "[email protected]" )
{
IsAnonymous = false ,
FullName = "Robbie Raygun" ,
FirstName = "Robbie"
} ; Por defecto, Raygun enviará la versión de ensamblaje de su proyecto con cada informe.
Si necesita proporcionar su propio valor de versión personalizado, puede hacerlo configurando la propiedad Application Version del RayGunClient (en el formato xxxx donde x es un entero positivo).
Al enviar excepciones manualmente, también puede enviar una lista arbitraria de etiquetas (una variedad de cadenas) y una colección de datos personalizados (un diccionario de cualquier objeto). Esto se puede hacer utilizando las diversas sobrecargas del método Send y SendInbackground.
El proveedor de Raygun4net utiliza la configuración de proxy de Windows predeterminada (como se establece en la pestaña Conexión de Internet Explorer, o Web.Config) al enviar mensajes a la API de Raygun. Si su proxy requiere credenciales de autenticación, puede proporcionarlas estableciendo la propiedad ProxyCredentials después de instancias de un raygunclient, luego usándolo para enviar más tarde:
var raygunClient = new RaygunClient ( )
{
ProxyCredentials = new NetworkCredential ( "user" , "password" )
} ; Puede proporcionar su propia clave de agrupación si lo desea. Solo recomendamos que esto tenga problemas con los errores que no se agrupan correctamente.
En una instancia de RayGunClient, adjunte un controlador de eventos al evento CustomGroupingKey. Se llamará a este controlador de eventos después de que Raygun haya construido el objeto Raygunmessage, pero antes de que se llame al evento SendingMessage. Los argumentos del evento proporcionan el objeto Raygunmessage que está a punto de ser enviado, y la excepción original que lo desencadenó. Puede usar cualquier cosa que desee generar la clave y establecerla mediante la propiedad CustomGroupingKey en los argumentos del evento. Configurarlo en una cadena nula o vacía dejará que la excepción sea agrupada por Raygun, configurarlo en algo hará que Raygun lo agrupe con otras excepciones que ha enviado con esa clave.
La clave tiene una longitud máxima de 100.
<RaygunSettings apikey="[Raygun4Net api key goes here]" throwOnError="true"/>