Olá pessoal, hoje eu vou falar um pouco como tenho utilizado o Application Erro minhas aplicações. É um recurso muito bom para pegar qualquer tipo de erro na aplicação, em qualquer momento, publicado ou não em servidores.
Existem muitas maneiras de pegar os erros no site e em sistemas web, podem gravar em TXT, XML, JSon, Event Log, banco de dados, mandar e-mail e muito mais. Pra mim, não importa a maneira que vai fazer, o que importa é registrar o erro, arrumar e deixar o cliente satisfeito.
Existem alguns frameworks específicos que registram erros nas aplicações e geral um Feed XML com os últimos 15 erros, por exemplo o ELMAH para Manage NuGet Packages for Solution.
O que eu vou mostrar é o desenvolvimento dentro do código, o que você vai fazer com ele já pode ser aplicado por você. No meu caso, eu vou mandar um simples e-mail para o administrador ou desenvolvedor do sistema.
O primeiro ponto é criar ou adicionar o código 1.1 no método Application_Error. A primeira linha Server.GetLastError(); pega o último erro gerado na aplicação. Depois eu adiciono o erro a uma variável Application["TheException"]. A terceira linha eu apago os erros para continuar. No final rediciono para a página de erro.aspx.
Global.asax - Código 1.1
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
Application["TheException"] = ex; //store the error for later
Server.ClearError(); //clear the error so we can continue onwards
Response.Redirect("~/Error.aspx"); //direct user to error page
}
Na página de error.aspx.cs existe um tratamento que pega a variável de erro Application["TheException"], faço um cast e mando e-mail para a pessoa administradora ou desenvolvedora do sistema. Veja o código 1.2.
Error.cs - Código 1.2
protected void Page_Load(object sender, EventArgs e)
{
try
{
Exception caughtException = (Exception)Application["TheException"];
Util.Email.enviaEmail("email", "email", "Erro no sistema <br/><Br> " + caughtException.InnerException.ToString() + "<br>" + caughtException.Message.ToString() + "<br>" + caughtException.Source.ToString() + "<br>" + caughtException.StackTrace.ToString(), "Erro no sistema");
}
catch (Exception ex)
{
throw ex;
}
}
Dentro do arquivo web.config eu posso redicionar também para a página de erro. Bem como isso não é necessário já que no Global.asax existe o redicionamento. Mas serve para você ter uma noção e como utilizar. Veja o código 1.3.
Web.config - Código 1.3.
<system.web>
<customErrors mode="On" defaultRedirect="Error.aspx?mensagem=generic">
<error statusCode="403" redirect="Erro.aspx?mensagem=NoAccess" />
<error statusCode="404" redirect="Erro.aspx?mensagem=FileNotFound" />
</customErrors>
<globalization culture="pt-BR" uiCulture="Auto" />
</system.web>
Existem alguns artigos que te ajudam a verificar e escrever os erros:
- https://www.ecode10.com/artigo/1075/Escrevendo-no-EventView
- https://www.ecode10.com/artigo/175/Gravando-erros-com-eventlog-Parte-I
- https://www.ecode10.com/artigo/181/Event-Log-Parte-II-Visual-Studio-NET-2005
- https://www.ecode10.com/artigo/220/Video-Ler-EventLog-do-Windows-usando-C-NET
Bom, espero que tenha gostado de como tratar erro e em caso de dúvidas pode entrar em contato pelo site pessoal https://www.mauriciojunior.org.