Desenvolvimento - ASP. NET

Utilizando Event Log – Visual Studio.NET 2005

Neste artigo, mostro como registrar os erros da aplicação criada dentro do event log do Windows.

por Mauricio Junior



Olá pessoal, meu nome é Mauricio Junior. Neste artigo, mostro como registrar os erros da aplicação criada dentro do event log do Windows. Para quem ainda não sabe o é event log do Windows, irei explicar.

No sistema operacional Windows existe um dispositivo que pega todos os erros que aconteceram ou que acontecem durante a execução de qualquer tipo de aplicativo, inclusive sua página ASP.NET ou aplicativo criado com o .NET.

Irei mostrar com separar as linhas dos erros, mostrar o tipo do ícone dentro do aplicativo event log e outras coisas mais.

Na referência 1.1 – EventLog, mostro onde pode ser encontrado todos os erros mencionado anteriormente.

Referência: 1.1

Para acessar o programa, basta entrar em MENU INICIAR / PAINEL DE CONTROLE / FERRAMENTAS ADMINISTRATIVAS / VISUALIZAR EVENTOS.

Quando cliquei no link o mesmo abre o programa. (Referência 1.2).

Referência: 1.2

Com o programa aberto, existem três itens onde são registrados os erros, APLICATIVO, SEGURANÇA E SISTEMA. Dentro da pasta APLICATIVO é onde vai ficar registrado o erro da página web.

Cliquei em qualquer erro registrado no aplicativo e mostro na referência 1.3 – EventLog.

Referência: 1.3

Explicação:

Dentro do evento de erro, existe a data, hora, tipo, erro, usuário, computador, fonte e a descrição do erro completo. Na próxima parte, irei mostrar como registrar e gravar os dados em todos os tipos de campos para identificar corretamente o erro acontecido.

Esse tipo de registro sempre é bom para saber o que está acontecendo dentro da sua classe ou aplicativo criado, funcionando pela web. Geralmente, nós programadores, sempre testamos os códigos com um vício, ou seja, teste viciado. Com esse tipo de geração de erro e registro, fica sempre tudo visível para o programador ou analista de sistemas.

Na prática, veja como irá ficar o erro que estou forçando a aplicação a fazer. (Referência 1.4).

Referência: 1.4

Agora o erro foi criado no eventlog. (1.5 – EventLog)

Referência: 1.5

Note que a classe é mostrada, o método e a mensagem de erro dentro do campo DESCRIÇÃO.

Na Prática

Vamos partir agora para a prática. Antes de tudo, devemos importar a classe de Diagnostics no início. (referência 1.6)

using System.Diagnostics;

Referência: 1.6

Depois de tudo, o código construído dentro da classe deve estar dentro dos blocos try e catch. (Referência 1.7).

public void metodo()

{

try

{

//codigo da classe

}

catch (Exception ex)

{

// codigo da classe

}

}

Referência: 1.7

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. Se no caso ocorrer 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. (Referência 1.8).

public void InsertFechamentoAgendado(TO to)

{

StringBuilder str = new StringBuilder();

str.Append("insert into FechAgendadoControle (");

str.Append(" DataProcessamento, NumCooperativa, IdProduto, ");

str.Append(" OrdemProduto, HorarioAgendado )");

str.Append(" values ( @dataProcessamento, @numCooperativa, ");

str.Append(" @idProduto, @ordemProduto, @horarioAgendado )");

StringConnection = GetConnection();

SqlConnection conn = SetSqlConnection();

try

{

SqlCommand cmd = new SqlCommand(str.ToString(), conn);

//setar parametros

setParametro(to, cmd);

cmd.CommandTimeout = 240;

conn.Open();

cmd.ExecuteNonQuery();

}

catch (Exception ex)

{

//codigo

}

finally

{

conn.Close();

}

}

Referência: 1.8

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. (Referência 1.9).

try

{

}

catch (SqlException ex)

{

}

catch (Exception ex)

{

}

Referência: 1.9

Depois de entender tudo sobre o catch, mostro e explico como gerar o erro dentro do evento do Windows. (Referência 1.10).

catch (Exception ex)

{

//registra o erro no event log

EventLog log = new EventLog();

log.Source = "Service Primeiro";

log.WriteEntry("Classe: Dall Service \r\n" +

"Método: InsertFechamentoAgendado \r\n" +

"Mensagem de erro: " + ex.Message + "\r\n \r\n" +

"StatTrace: " + ex.StackTrace, EventLogEntryType.Error);

throw ex;

}

Referência: 1.10

Explicação:

O primeiro de tudo foi instanciar o EventLog da forma (Referência 1.11).

EventLog log = new EventLog();

Referência: 1.11

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. (Referência 1.12).

log.Source = "Service Primeiro";

Referência: 1.12

O terceiro passo é pegar a descrição do erro, identificar a classe que aconteceu o erro, ficando assim melhor o reconhecimento dentro do programa visualizador do sistema operacional Windows. (Referência 1.13).

log.WriteEntry("Classe: Dall Service \r\n" +

"Método: InsertFechamentoAgendado \r\n" +

"Mensagem de erro: " + ex.Message + "\r\n \r\n" +

"StatTrace: " + ex.StackTrace, EventLogEntryType.Error);

Referência: 1.13

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.14) mostra como ficará dentro do event view.

Classe: Dall Service

Método: GeraXMLDocument

Mensagem de erro: Caracteres inválidos no caminho.

StatTrace: em System.IO.Path.CheckInvalidPathChars(String path)

em System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)

em System.IO.Path.GetFullPathInternal(String path)

em System.IO.Path.GetFullPath(String path)

em System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)

em System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)

em System.Xml.XmlTextReaderImpl..ctor(String url, XmlNameTable nt)

em System.Xml.XmlTextReader..ctor(String url, XmlNameTable nt)

em System.Xml.XmlDocument.Load(String filename)

em Bancoob.ServicePrimeiro.Dall.DallService.GeraXMLDocument(DataSet dtSet) na c:\Mauricio\Projetos Bancoob\Fechamento Agendado\Web\App_Code\Dall\DallService.cs:linha 164

Para obter mais informações, visite o Centro de ajuda e suporte em http://go.microsoft.com/fwlink/events.asp.

Referência: 1.14

Segue a figura de ilustração. (Referência 1.15).

Referência: 1.15

Bom, fico por aqui.

Mauricio Junior

www.ascompras.com

www.aspneti.com

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org