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.