Application Error

image

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:

  1. https://www.ecode10.com/artigo/1075/Escrevendo-no-EventView
  2. https://www.ecode10.com/artigo/175/Gravando-erros-com-eventlog-Parte-I
  3. https://www.ecode10.com/artigo/181/Event-Log-Parte-II-Visual-Studio-NET-2005
  4. 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.