Arquivo

Posts Tagged ‘EventLog’

Instrumentação .NET – EventLog

No artigo de hoje irei demonstrar como usar o Visualizador de Eventos do Windows para instrumentar sua aplicação.

Para acessar o Visualizador de Eventos do Windows digite “eventvwr” no executar. Este gerenciador de eventos disponibiliza, na janela da esquerda, todos os EventLog cadastrados no computador, o próprio Windows utiliza eles para logar eventos do sistema. Já na janela da direita, quando você selecionar um EventLog deve aparecer uma lista de eventos que foram registrados pelo Windows. Preste atenção na coluna “Fonte”, ela indica de onde veio este evento, que no nosso caso virá do aplicativo criado.

Para criar um EventLog via código para ser usado pela sua aplicação devemos importar o namespace System.Diagnostics e utilizar a classe EventLog. Como no exemplo abaixo:

EventLog.CreateEventSource(“Fonte”, “TesteLog”);// Cria um EventLog junto com uma fonte válida
EventLog.CreateEventSource(“Fonte2”, “TesteLog”);// Cria uma segunda fonte aproveitando o EventLog já criado

Você pode perceber que o EventLog contêm uma inteligência dentro da criação do evento, ou seja, caso o evento já tenha sido criado ele aproveita este evento e adiciona uma fonte nele. Outra item interessante é que, quando você cria um EventLog automaticamente ele cria um uma fonte de mesmo nome. Isto garante que o EventLog poderá ser usado.

Quando você cria uma nova fonte, você deve verificar se esta fonte já não esta registrada no computador, se já estiver registrada sua aplicação irá disparar uma exceção. Segue abaixo alguns recursos interessante que o EventLog tem para você evitar este problema e outros.

EventLog.Exists(“TesteLog”); //Verifica se existe um EventLog
EventLog.SourceExists(“TesteLog”); //verifica se existe uma fonte
EventLog.Delete(“TesteLog”); //Apaga o EventLog junto com todas as suas fontes
EventLog.DeleteEventSource(“Fonte”); //Exclui a fonte do evento
EventLog.CreateEventSource(“Fonte”, “TesteLog”);// Cria um EventLog junto com uma fonte válida

Você pode retornar uma lista de EventLogs cadastrados no computador utilizando o método GetEventLogs. Segue abaixo um exemplo.

foreach (EventLog e in EventLog.GetEventLogs())
{
    Console.WriteLine(e.Log); //Nome do Log
    Console.WriteLine(e.Source); //Recupera o nome da fonte ou registra quando você der uma entrada no log
    Console.WriteLine(e.LogDisplayName); //Nome de visualização
    Console.WriteLine(e.MachineName); //Maquina a qual o log esta referenciado
    Console.WriteLine(e.OverflowAction.ToString()); //Retorna qual será o comportamento do log caso ele fique cheio
}

Enfim vamos aprender como registrar um evento que aconteceu na sua aplicação.

EventLog log = new EventLog(“TesteLog”); //Configura qual EventLog será utilizado para gravar o evento
log.Source = “Fonte”; //Configura em qual fonte será a entrada do evento.
log.WriteEntry(“Erro da aplicação”, EventLogEntryType.Error, 1001, 1); //Efetiva as configurações anteriores e grava o evento

Perceba que o método WriteEntry aceita quatro parâmetros de entrada. O primeiro é a descrição do evento, o segundo é o tipo do evento, que pode ser de Erro, Informação, Alerta, Sucesso ou Falha em uma auditoria de segurança, já os últimos dois são utilizados para identificar mais fácil o evento, Id do Evento e Id da Categoria. É muito útil caso você crie uma documentação do seu sistema. Porém você pode usar outros métodos WriteEntry que contêm menos parâmetros.

Para ler os eventos registrados em um determinado EventLog utilize o seguinte exemplo.

EventLog log = new EventLog(“TesteLog”); //Recupera um log existente
foreach (EventLogEntry entrada in log.Entries)
{
     Console.WriteLine(entrada.Message); //Descrição do evento ocorrido
     Console.WriteLine(entrada.Category); //Categoria do evento
     Console.WriteLine(entrada.CategoryNumber); //Número da categoria do evento
     Console.WriteLine(entrada.EntryType.ToString()); //Tipo do evento
     Console.WriteLine(entrada.Index); //Índice do evento em relação a lista
     Console.WriteLine(entrada.MachineName); //Maquina a qual o evento foi geral
     Console.WriteLine(entrada.Source); //Fonte do evento
     Console.WriteLine(entrada.TimeWritten); //Qual horário o evento foi escrito
     Console.WriteLine(entrada.TimeGenerated); //Qual horário o evento foi gerado
     Console.WriteLine(entrada.UserName); //Qual usuário estava logado durante o evento
}

E finalmente, para limpar o EventLog utilize o método Clear.

EventLog log = new EventLog(“TesteLog”); //Recupera um log existente
log.Clear(); //Limpa todas as entradas de um EventLog específico

Espero que este post tenha sido simples e prático e que possa ajudar você a instrumentar sua aplicação.

Advertisement
Categorias:.NET Framework Etiquetas:,
%d bloggers gostam disto: