Dev (Back & Front)ARTIGO

Utilizando Event Log – Parte 02

No artigo anterior, mostramos onde são gravados todos os erros dentro do sistema
operacional quando a aplicação gera um erro inesperado. Agora, veremos na prática
como cadastrar esse erro inesperado dentro do programa Event View ou
Visualizar Eventos.

Requisitos:

  • Usar IDE Visual
    Studio.NET 2005;
  • Conhecimento de
    sistema operacional windows;
  • Conhecimento
    avançado C#.NET.

Na prática

Antes de tudo,
deve importar a classe de Diagnostics no início (1.1 – Event Log – Parte II)

using System.Diagnostics;

Referência: 1.1 – Event Log – Parte II

Depois de tudo, o
código construído dentro da classe deve estar dentro dos blocos try e catch.
(1.2 – Event Log – Parte II).

   public void metodo()<br /><br />        {<br /><br />            try<br /><br />            {<br /><br />                //codigo da classe<br /><br />            }<br /><br />            catch (Exception ex)<br /><br />            {<br /><br />                // codigo da classe<br /><br />            }<br /><br />        }

Referência: 1.2
Event Log – Parte II

Explicação:

Dentro do bloco try
todo o código é feito normalmente, pode ser o que for, sem medo de nada, ou
seja, apenas uma linha de imprimir algum resultado. Caso ocorra algum
tipo de erro inesperado, o foco do código será redirecionado para dentro
do bloco catch, ou seja, irá tentar pegar o erro gerado pela aplicação.

Segue um exemplo
da classe que insere no banco de dados alguns valores (1.3 Event Log – Parte
II):

 public void InsertFechamentoAgendado(TO to)<br /><br />        {<br /><br />            StringBuilder str = new StringBuilder();<br /><br />            str.Append("insert into FechAgendadoControle (");<br /><br />            str.Append(" DataProcessamento, NumCooperativa, IdProduto, ");<br /><br />            str.Append(" OrdemProduto, HorarioAgendado )");<br /><br />            str.Append(" values ( @dataProcessamento, @numCooperativa, ");<br /><br />            str.Append(" @idProduto, @ordemProduto, @horarioAgendado )");<br /><br /><br /><br />            StringConnection = GetConnection();<br /><br />            SqlConnection conn = SetSqlConnection();<br /><br /><br /><br />            try<br /><br />            {<br /><br />                SqlCommand cmd = new SqlCommand(str.ToString(), conn);<br /><br /><br /><br />                //setar parametros<br /><br />                setParametro(to, cmd);<br /><br /><br /><br />                cmd.CommandTimeout = 240;<br /><br /><br /><br />                conn.Open();<br /><br />                cmd.ExecuteNonQuery();<br /><br />            }<br /><br />            catch (Exception ex)<br /><br />            {<br /><br />                //codigo<br /><br />            }<br /><br />            finally<br /><br />            {<br /><br />                conn.Close();<br /><br />            }<br /><br />        } 

Referência: 1.3
Event Log – Parte II

Note que existe o
código feito dentro do bloco try, ou seja, todas as linhas dentro
podem dar algum tipo de erro na aplicação, por isso foram colocadas dentro do
bloco. Para publicar um erro no visualizador do windows, basta colocar o código
dentro do bloco catch. Sempre coloco o tipo de entrada como Exception
para que qualquer tipo de erro seja capturado. Se existe um outro tipo de erro
mais específico, deve ser colocado outro bloco antes do genérico (1.4 Event
Log – Parte II).

   try<br /><br />            {<br /><br /><br /><br />            }<br /><br />            catch (SqlException ex)<br /><br />            {<br /><br /><br /><br />            }<br /><br />            catch (Exception ex)<br /><br />            {<br /><br /><br /><br />            }

 Referência: 1.4
Event Log – Parte II

Depois de
entender tudo sobre o catch, mostro e explico como gerar o erro dentro do
evento do windows (1.5 – Event Log – Parte II).

          catch (Exception ex)<br /><br />            {<br /><br />                //registra o erro no event log<br /><br />                EventLog log = new EventLog();<br /><br />                log.Source = "Service Primeiro";<br /><br />                log.WriteEntry("Classe: Dall Service \r\n" +<br /><br />                               "Método: InsertFechamentoAgendado \r\n" +<br /><br />                               "Mensagem de erro: " + ex.Message + "\r\n \r\n" +<br /><br />                               "StatTrace: " + ex.StackTrace, EventLogEntryType.Error);<br /><br /><br /><br />                throw ex;<br /><br />            }

Referência: 1.5
Event Log – Parte II

Explicação:

O primeiro de
tudo foi instanciar o EventLog da forma (1.6 Event Log – Parte II).

EventLog<br />  log = new EventLog();

Referência: 1.6
Event Log – Parte II

O segundo passo
digita a variável log para registrar o Source, ou seja, o nome que irá
aparecer na entrada do programa, a identificação de qual foi o programa que deu
erro (1.7 Event Log – Parte II).

log.Source = "Service<br />  Primeiro";

Referência: 1.7
Event Log – Parte II

O terceiro passo
é pegar a descrição do erro, identificar a classe em que aconteceu o erro, ficando
assim melhor o reconhecimento dentro do programa visualizador do sistema
operacional Windows (1.8 Event Log – Parte II).

og.WriteEntry("Classe: Dall Service \r\n" +<br /><br />"Método: InsertFechamentoAgendado \r\n" +<br /><br />"Mensagem de erro: " + ex.Message + "\r\n \r\n" +<br /><br />"StatTrace: " + ex.StackTrace, EventLogEntryType.Error);

Referência: 1.8 Event Log – Parte II

O commando log.WriteEntry
apenas escreve a descrição do erro dentro do campo descrição do programa. Note
que sempre identifico a classe, método e mensagem de erro todas juntas.

A referência (1.9
Event Log – Parte II) mostra como ficará dentro do event view.

Classe: Dall Service<br /><br />Método: GeraXMLDocument<br /><br />Mensagem de erro: Caracteres inválidos no caminho.<br /><br /><br /><br />StatTrace:    em System.IO.Path.CheckInvalidPathChars(String path)<br /><br />   em System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)<br /><br />   em System.IO.Path.GetFullPathInternal(String path)<br /><br />   em System.IO.Path.GetFullPath(String path)<br /><br />   em System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)<br /><br />   em System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)<br /><br />   em System.Xml.XmlTextReaderImpl..ctor(String url, XmlNameTable nt)<br /><br />   em System.Xml.XmlTextReader..ctor(String url, XmlNameTable nt)<br /><br />   em System.Xml.XmlDocument.Load(String filename)<br /><br />   em Bancoob.ServicePrimeiro.Dall.DallService.GeraXMLDocument(DataSet dtSet) na c:\Mauricio\Projetos Bancoob\Fechamento Agendado\Web\App_Code\Dall\DallService.cs:linha 164<br /><br /><br /><br />Para obter mais informações, visite o Centro de ajuda e suporte em http://go.microsoft.com/fwlink/events.asp.

Referência: 1.9
Event Log – Parte II

Segue a figura de
ilustração (1.10 Event Log – Parte II):

Referência: 1.10 Event Log – Parte II

Bom, fico por
aqui. Aguardo os comentários, até a próxima.

Com mais de 20 anos trabalhando no mercado de tecnologia. Mestre em Engenharia Elétrica voltada para o mundo mobile, com mais de 20 livros publicados e cerca de 700 artigos publicados com intuito de ajudar àqueles que querem aprender a programar (site, software, desktop, serviços, api e mobile). Site pessoal: https://www.mauriciojunior.net - MVP, MCAD, MCP Microsoft

Ver perfil