Provedor de Raygun para estrutura .NET
Os projetos construídos com as seguintes estruturas são suportadas:
Instale o pacote NUGET em um projeto que usa uma das estruturas acima e a montagem correta será referenciada.
Para Xamarin, recomendamos a adição de Raygun4xamarin.forms, ou o Mindscape.raygun4net.xamarin.android & Mindscape.raygun4net.xamarin.ios.unified Packages.
Para versões .NET CORE e .NET 5.0 ou superior, recomendamos o uso do pacote Mindscape.raygun4net.netcore.
dotnet add package Mindscape.Raygun4NetConsulte os documentos Raygun para obter instruções mais detalhadas sobre como usar este provedor.
Ao enviar exceções ao Serviço Raygun, é necessária uma chave de API do aplicativo para mapear as mensagens para o seu aplicativo.
Quando você cria um novo aplicativo no seu painel Raygun, sua tecla API do aplicativo é exibida na página Instruções. Você também pode encontrar a tecla API clicando no botão "Configurações do aplicativo" na barra lateral do painel Raygun.
As classes principais podem ser encontradas no espaço para nome da Mindscape.raygun4net.
O provedor Raygun4Net inclui suporte para muitas estruturas .NET. Role para baixo para encontrar informações sobre o uso do Raygun para o seu tipo de aplicativo.
A partir da versão 5.0.0, o suporte do ASP.NET foi transferido para um novo pacote NUGET. Se você possui um projeto ASP.NET, desinstale o pacote Raygun4Net Nuget e instale o pacote Mindscape.raygun4net.aspnetcore nuget.
Depois que o pacote estiver instalado, adicione o código a seguir ao seu appSsets.json (se você estiver usando outro tipo de configuração, adicione -o lá):
"RaygunSettings" : {
"ApiKey" : " YOUR_APP_API_KEY "
}Configure o middleware Raygun para lidar com exceções que foram acionadas e envie exceções não tratadas automaticamente.
No Program.cs :
using Mindscape.Raygun4Net.AspNetCore; para você usar declarações.builder.Services.AddRaygun(builder.Configuration); .app.UseRaygun(); Após outros métodos de manutenção de exceção, por exemplo, app.UseDeveloperExceptionPage() ou 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*/A configuração acima fará com que todas as exceções não tratadas sejam enviadas para a sua conta Raygun, onde você pode visualizar facilmente todos os dados de monitoramento de erros e relatório de falha.
Os nós de ingestão de Raygun exigem TLS 1.2 ou TLS 1.3 Se você estiver usando .NET 3.5 ou anterior , pode ser necessário ativar esses protocolos em seu aplicativo e corrigir seu sistema operacional.
Confira o guia de solução de problemas do TLS da Microsoft para obter suas recomendações.
Atualizando a propriedade Protocolo no código de inicialização do seu aplicativo.
protected void Application_Start ( )
{
// Enable TLS 1.2 and TLS 1.3
ServicePointManager . SecurityProtocol |= ( ( SecurityProtocolType ) 3072 /*TLS 1.2*/ | ( SecurityProtocolType ) 12288 /*TLS 1.3*/ ) ;
} No seu arquivo web.config, encontre ou adicione um elemento <configSections> , que deve ser aninhado no elemento <configuration> e adicione a seguinte entrada:
<section name="RaygunSettings" type="Mindscape.Raygun4Net.RaygunSettings, Mindscape.Raygun4Net"/>
Em seguida, faça referenciá -lo adicionando a seguinte linha em algum lugar após a tag configSections .
< RaygunSettings apikey = " YOUR_APP_API_KEY " />Agora você pode configurar o Raygun para enviar exceções não atendidas automaticamente ou/e enviar exceções manualmente.
Para enviar exceções não tratadas automaticamente, use o módulo Raygun HTTP dentro do elemento <configuration> no web.config. Isso é feito um pouco diferente, dependendo da versão do IIS que você está usando. Em caso de dúvida, tente os dois:
< system .web>
< httpModules >
< add name = " RaygunErrorModule " type = " Mindscape.Raygun4Net.RaygunHttpModule " />
</ httpModules >
</ system .web> Para o IIS 7.0, use system.webServer
< system .webServer>
< modules >
< add name = " RaygunErrorModule " type = " Mindscape.Raygun4Net.RaygunHttpModule " />
</ modules >
</ system .webServer>Em qualquer lugar do seu código, você também pode enviar relatórios de exceção manualmente simplesmente criando uma nova instância dos Raygunclient e chamando um dos métodos de envio ou sendinbackground. Isso é mais comumente usado para enviar exceções capturadas em um bloco de tentativa/captura.
try
{
}
catch ( Exception e )
{
new RaygunClient ( ) . SendInBackground ( e ) ;
}Ou enviar exceções em seus próprios manipuladores, em vez de usar a configuração automática acima.
protected void Application_Error ( )
{
var exception = Server . GetLastError ( ) ;
new RaygunClient ( ) . Send ( exception ) ;
} Excluir erros pelo código de status HTTP
Se estiver usando o módulo HTTP, você pode excluir erros pelo código de status HTTP, fornecendo uma lista separada por vírgula dos códigos de status para ignorar na configuração. Por exemplo, se você quiser excluir erros que retornam o código de resposta I'm I'm Acepot, você pode usar a configuração abaixo.
< RaygunSettings apikey = " YOUR_APP_API_KEY " excludeHttpStatusCodes = " 418 " />Exclua erros originários de uma origem local
Alternar este booleano e o módulo HTTP não enviarão erros para Raygun se a solicitação se originou de uma origem local. ou seja, uma maneira de impedir que a depuração/desenvolvimento local notifique Raygun sem precisar recorrer às transformações da Web.Config.
< RaygunSettings apikey = " YOUR_APP_API_KEY " excludeErrorsFromLocal = " true " />Remover dados de solicitação sensível
Se você possui dados confidenciais em uma solicitação HTTP que deseja impedir que seja transmitido a Raygun, poderá fornecer listas de possíveis chaves (nomes) para remover. As chaves a serem ignoradas podem ser especificadas na tag RaygunSettings no web.config (ou você pode usar os métodos equivalentes no RayGunclient se estiver configurando as coisas no código). As opções disponíveis são:
Estes podem ser definidos como uma lista separada por vírgula de chaves a serem ignoradas. Definir uma opção como * indicará que todas as teclas não serão enviadas para Raygun. A colocação * antes, depois ou nas duas extremidades de uma chave, executará as pontas-com partida ou contém operação, respectivamente. Por exemplo, o ignoreFieldNames = "*senha*" fará com que Raygun ignore todos os campos de formulários que contêm "senha" em qualquer lugar do nome. Essas opções não são sensíveis ao caso.
Fornecendo um raygunclient personalizado para o módulo HTTP
Às vezes, ao configurar o Raygun usando o módulo HTTP para enviar exceções automaticamente, pode ser necessário fornecer ao módulo HTTP uma instância RayGunclient personalizada para usar parte do recurso opcional descrito no final deste arquivo. Para fazer isso, obtenha seu aplicativo HTTP para implementar a interface IrayGunApplication. Implemente o método GeraterayGunclient para retornar uma nova instância (ou criada anteriormente) Raygunclient. O módulo HTTP usará o RayGunclient retornado deste método para enviar as exceções não tratadas. Neste método, você pode configurar quaisquer opções adicionais na instância RayGunclient que você precisa - mais informações sobre cada recurso são descritas no final deste arquivo.
A partir da versão 4.0.0, o suporte ao MVC foi transferido para um novo pacote NUGET. Se você possui um projeto MVC, desinstale o pacote Raygun4Net Nuget e instale o pacote Mindscape.Raygun4Net.Mvc NUGET.
Depois que o pacote for instalado, consulte o pacote ReadMe para obter instruções sobre configuração.
Os pacotes MVC e Webapi Nuget podem ser instalados no mesmo projeto com segurança.
A partir da versão 4.0.0, o suporte a webapi foi transferido para um novo pacote NUGET. Se você possui um projeto webapi, desinstale o pacote Raygun4net Nuget e instale o pacote Mindscape.Raygun4Net.WebApi nuget.
Depois que o pacote for instalado, consulte o pacote ReadMe para obter instruções sobre configuração.
Os pacotes MVC e Webapi Nuget podem ser instalados no mesmo projeto com segurança.
Crie uma instância de RayGunclient passando sua chave de API do aplicativo no construtor. Anexe um manipulador de eventos ao evento DispatcheNhandledException do seu aplicativo. No manipulador de eventos, use o método RayGunclient.send para enviar a exceção.
private RaygunClient _client = new RaygunClient ( "YOUR_APP_API_KEY" ) ;
public App ( )
{
DispatcherUnhandledException += OnDispatcherUnhandledException ;
}
void OnDispatcherUnhandledException ( object sender , DispatcherUnhandledExceptionEventArgs e )
{
_client . Send ( e . Exception ) ;
}Crie uma instância de RayGunclient passando sua chave de API do aplicativo no construtor. Anexe um manipulador de eventos ao evento Application.ThreadException antes de ligar para o aplicativo.run (...). No manipulador de eventos, use o método RayGunclient.send para enviar a exceção.
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 ) ;
}No construtor app.xaml.cs (ou em qualquer ponto de entrada principal para o seu aplicativo), ligue para o método estático RayGunclient.attach usando sua chave da API.
public App ( )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
}Em qualquer momento, depois de chamar o método Anex, você pode usar Raygunient.Current para obter a instância estática. Isso pode ser usado para enviar mensagens manualmente (através dos métodos de envio) ou alterar opções como a sequência de identidade do usuário.
As opções disponíveis no WinRT para capturar exceções não atendidas neste momento são mais limitadas em comparação com as opções na estrutura .NET mais madura. O evento UnhleLedException será aumentado quando o XAML inválido for analisado, além de outras exceções de tempo de execução que acontecem no thread principal da interface do usuário. Embora muitos erros sejam apanhados dessa maneira e, portanto, possam ser enviados para Raygun, outros serão perdidos por esse manipulador de exceção. Em particular, o código assíncrono ou tarefas que executam em threads em segundo plano não terão suas exceções capturadas.
Uma solução alternativa para esse problema é fornecida com o método wrap (). Isso permite que você passe o código que deseja executar para uma instância do cliente Raygun - ele simplesmente o chama de cercado por um bloco de tentativa. Se o método que você passa resultar em uma exceção que será lançada, isso será transmitido a Raygun, e a exceção será novamente lançada. Duas sobrecargas estão disponíveis; um para métodos que retornam vazios e outro para métodos que retornam um objeto.
Outra opção é usar a biblioteca de fodas e sua extensão AsyCerrorHandler. Isso captará automaticamente exceções assíncronas e as passará a um manipulador de sua escolha (que enviaria a Raygun como acima). Consulte as instruções de instalação aqui e confira o projeto de amostra de como usar.
Na atividade principal/de entrada do seu aplicativo, use o método estático raygunclient.attach usando sua chave da API do aplicativo. Há também uma sobrecarga para o método de anexo que permite passar em uma string de identidade do usuário que é útil para rastrear os usuários afetados no painel Raygun.
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;Em qualquer momento, depois de chamar o método Anex, você pode usar Raygunient.Current para obter a instância estática. Isso pode ser usado para enviar manualmente mensagens ou alterar opções como a sequência de identidade do usuário.
No ponto de entrada principal do aplicativo, use o método estático raygunclient.attach usando sua tecla API do aplicativo.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
UIApplication . Main ( args , null , "AppDelegate" ) ;
}Há também uma sobrecarga para o método de anexo que permite que você permita a reportagem nativa de falha do iOS.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" , true , true ) ;
UIApplication . Main ( args , null , "AppDelegate" ) ;
}O primeiro parâmetro booleano é simplesmente ativar o relatório de erro do iOS nativo. O segundo parâmetro booleano é se seqüestrar ou não alguns dos sinais nativos - isso é para resolver o conhecido problema de repórter do iOS Crash, onde as exceções de referência nula em um bloco de tentativa/captura podem fazer com que o aplicativo trave. Ao definir o segundo parâmetro booleano como true, o código gerenciado assumirá os sinais iOS Sigbus e Sigsegv, que resolve o problema de referência nula. Fazer isso, no entanto, impede que os erros nativos de Sigbus e Sigsegv sejam detectados, o que significa que eles não são enviados para Raygun. É por isso que fornecemos isso como uma opção - por isso, se você não tiver nenhum problema com exceções de referência nula que ocorrem nos blocos de tentativa/captura e deseja maximizar os erros nativos dos quais você pode ser notificado e defina o segundo parâmetro booleano como falso.
Em qualquer momento, depois de chamar o método Anex, você pode usar Raygunient.Current para obter a instância estática. Isso pode ser usado para enviar manualmente mensagens ou alterar opções como a sequência de identidade do usuário.
No ponto de entrada principal do aplicativo, use o método estático raygunclient.attach usando sua tecla API do aplicativo.
static void Main ( string [ ] args )
{
RaygunClient . Attach ( "YOUR_APP_API_KEY" ) ;
NSApplication . Init ( ) ;
NSApplication . Main ( args ) ;
}Em qualquer momento, depois de chamar o método Anex, você pode usar Raygunient.Current para obter a instância estática. Isso pode ser usado para enviar manualmente mensagens ou alterar opções como a sequência de identidade do usuário.
Em uma instância RayGunclient, anexe um manipulador de eventos ao evento SendingMessage. Este manipulador de eventos será chamado pouco antes do RayGunclient enviar uma exceção - automaticamente ou manualmente. Os argumentos do evento fornecem o objeto Raygunmessage que está prestes a ser enviado. Um uso para este manipulador de eventos é adicionar ou modificar qualquer informação sobre o raygunmessage. Outro uso para esse método é identificar exceções que você nunca deseja enviar para Raygun e, em caso afirmativo, defina e.cancel = true para cancelar o envio.
Se você tem exceções externas comuns que envolvem uma exceção interna valiosa pela qual você prefere agrupar, pode especificá-las usando o método multi-parâmetro:
raygunClient . AddWrapperExceptions ( typeof ( TargetInvocationException ) ) ;Nesse caso, se ocorrer um TargetInvocationException, ele será removido e substituído pela innerexception real que foi a causa. Observe que httpunhandledException e TargetInvocationException já estão adicionados à lista de exceções do wrapper; Você não precisa adicioná -los manualmente. Esse método é útil se você tiver suas próprias exceções de wrapper personalizadas, ou uma estrutura estiver lançando exceções usando seu próprio wrapper.
Existe uma propriedade chamada User no RayGunclient, que você pode definir como o ID do usuário atual. Isso permite que você veja a contagem de usuários afetados para cada erro no painel Raygun.
Se você deseja informações mais detalhadas sobre os usuários (e a capacidade de usar o novo recurso de relatório de usuário afetado quando for lançado), você pode definir a propriedade UserInfo no RayGunclient para um novo objeto RayGunIdentifierMessage. Esta classe possui várias propriedades para ajudar a identificar o usuário que sofreu uma falha.
Certifique -se de cumprir quaisquer políticas de privacidade que sua empresa segue ao usar esse recurso.
O único campo necessário é identificador.
Identifier é o identificador exclusivo do seu sistema para este usuário.
IsAnonymous é um sinalizador indicando se o usuário está conectado (ou identificável) ou se é anônimo. Um usuário anônimo ainda pode ter um identificador exclusivo.
Email o endereço de e -mail do usuário. Se você usar endereços de email para identificar seus usuários, sinta -se à vontade para definir o identificador para o e -mail deles e deixar isso em branco, pois usaremos o identificador como o endereço de email, se parecer um, e nenhum endereço de email não for especificado.
FullName o nome completo do usuário.
FirstName o primeiro nome (ou preferido) do usuário.
UUID um identificador de dispositivo. Pode ser usado para identificar usuários entre dispositivos ou máquinas que estão quebrando para muitos usuários.
raygunClient . User = "[email protected]" ;
// OR
raygunClient . UserInfo = new RaygunIdentifierMessage ( "[email protected]" )
{
IsAnonymous = false ,
FullName = "Robbie Raygun" ,
FirstName = "Robbie"
} ; Por padrão, a Raygun enviará a versão de montagem do seu projeto com cada relatório.
Se você precisar fornecer seu próprio valor de versão personalizado, poderá fazê -lo definindo a propriedade ApplicationVersion do RaygunClient (no formato XXXX, onde X é um número inteiro positivo).
Ao enviar exceções manualmente, você também pode enviar uma lista arbitrária de tags (uma matriz de strings) e uma coleção de dados personalizados (um dicionário de quaisquer objetos). Isso pode ser feito usando as várias sobrecargas do método de envio e sendinbackground.
O provedor Raygun4Net usa as configurações de proxy do Windows padrão (conforme definido na guia Connection do Internet Explorer ou web.config) ao enviar mensagens para a API Raygun. Se o seu proxy exigir credenciais de autenticação, você poderá fornecê -las definindo a propriedade ProxyCredentials após instanciar um raygunclient e depois usá -lo para enviar posteriormente:
var raygunClient = new RaygunClient ( )
{
ProxyCredentials = new NetworkCredential ( "user" , "password" )
} ; Você pode fornecer sua própria chave de agrupamento, se desejar. Recomendamos apenas isso que você está tendo problemas com erros não sendo agrupados corretamente.
Em uma instância RaygunClient, anexe um manipulador de eventos ao evento CustomGroupingKey. Este manipulador de eventos será chamado depois que a Raygun construiu o objeto Raygunmessage, mas antes que o evento SendingMessage seja chamado. Os argumentos do evento fornecem o objeto Raygunmessage que está prestes a ser enviado e a exceção original que o desencadeou. Você pode usar o que quiser para gerar a chave e defini -la pela Property CustomGroupingKey nos argumentos do evento. Configurar na string nula ou vazia deixará a exceção a ser agrupada por Raygun, configurá -la para algo fará com que Raygun o agrupe com outras exceções que você enviou com essa chave.
A chave tem um comprimento máximo de 100.
<RaygunSettings apikey="[Raygun4Net api key goes here]" throwOnError="true"/>