Log de aplicações .NET através do Event Viewer

Veja neste artigo como registrar, a partir de aplicações construídas sob o .NET Framework, mensagens de log no Visualizador de Eventos do Windows (utilitário este também conhecido como Event Viewer).

O monitoramento de aplicações num ambiente corporativo é uma tarefa extremamente importante, fornecendo meios para que administradores de sistemas possam atuar diante de eventos inesperados em tais softwares. A técnica que garante a geração das informações necessárias para atividades deste tipo é conhecida pelo nome de instrumentação.

Muitas vezes, a gravação de dados que descrevem o que vem acontecendo em uma aplicação acaba por ser relegada a um segundo plano. Isto se deve a uma série de razões bem conhecidas por aqueles que estão familiarizados com a área de TI, passando desde pela pressão na entrega mais rápida de projetos, ou até mesmo pelo próprio desconhecimento/esquecimento dos envolvidos na construção/implantação de um sistema em se atentar a esses detalhes.

Além disso, quando se considera o cenário atual, é um fato bastante comum que muitas organizações também estejam sujeitas a rigorosas auditorias em seus processos. Um bom exemplo disso são companhias com ações negociadas em bolsas de valores. Em tais casos, diversas medidas decorrentes de regulamentações financeiras precisarão ser adotadas, incluindo nisto a gravação de dados que possibilitem rastrear eventos que aconteceram em aplicações de uso cotidiano.

Ao conjunto de registros que descrevem as mais diversas ocorrências dentro de um sistema dá-se o nome de log. Diversas são as abordagens que podem ser empregadas na gravação de informação deste gênero:


Figura 1: Visualizador de Eventos do Windows 7

OBSERVAÇÃO: Em computadores com o Windows 7 instalado, o Visualizador de Eventos pode ser acessado a partir do menu Iniciar > Ferramentas Administrativas > Visualizador de Eventos.

O objetivo deste artigo é justamente demonstrar como informações podem ser gravadas no Event Viewer do Windows. Buscando cumprir essa meta, serão apresentados alguns exemplos de código que fazem uso de estruturas do .NET voltadas a demandas deste tipo.

Manipulando informações do Event Viewer em .NET

Os recursos que permitem a gravação de informações no Visualizador de Eventos do Windows existem desde a versão 2.0 do .NET Framework, encontrando-se definidos no namespace System.Diagnostics. O exemplo aqui abordado faz uso das seguintes estruturas:

Na Tabela 1 estão indicados os valores possíveis para o enumeration EventLogEntryType.

ValorDescrição
ErrorIndica a ocorrência de algum erro como perda de dados ou falha na execução de uma funcionalidade.
WarningEmbora não seja propriamente uma falha, mensagens deste tipo representam alertas de problemas que podem resultar em erros no futuro.
InformationEntrada de caráter informativo, indicando normalmente a ocorrência com sucesso de um determinado evento.
SuccessAuditComumente associado a eventos de segurança, pode ser utilizado para registrar que uma tentativa de logon foi bem sucedida.
FailureAuditTambém relativo a questões de segurança, este valor indica que uma operação não teve êxito. Um exemplo disto é a tentativa de acesso a um arquivo para o qual não se possui permissão.

Tabela 1: Valores possíveis para o enumeration EventLogEntryType

Na Listagem 1 é apresentada a implementação da classe estática EventViewerHelper. Este tipo utiliza os mecanismos de log já mencionados nesta seção, sendo que a gravação de informações descrevendo eventos de uma aplicação acontecerá por meio da operação RegistrarMensagem.

Quanto ao funcionamento do método estático RegistrarMensagem, é possível destacar:

Listagem 1: Classe EventViewerHelper

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace TesteEventViewer { public static class EventViewerHelper { public static void RegistrarMensagem( string origemMensagem, string conteudoMensagem, EventLogEntryType tipoMensagem) { if (!EventLog.SourceExists(origemMensagem)) { EventLog.CreateEventSource( origemMensagem, "Application"); } EventLog log = new EventLog(); log.Source = origemMensagem; log.WriteEntry(conteudoMensagem, tipoMensagem); } } }

A Listagem 2 apresenta um exemplo de utilização da classe EventViewerHelper. O método Main desta aplicação aciona o método RegistrarMensagem, visando com isto gravar no log do Windows uma notificação de que o sistema considerado foi executado num determinado momento (conforme indicado na Figura 2).

Listagem 2: Exemplo de trecho de código que faz uso da classe EventViewerHelper


Figura 2: Mensagem de log gravada no Event Viewer

OBSERVAÇÃO: caso se realizem testes a partir do Visual Studio e que envolvam a gravação de informações no Event Viewer, executar este aplicativo como “Administrador”, pois do contrário ocorrerá uma falha de segurança.

Conclusão

Procurei com este artigo demonstrar como o mecanismo de log do Windows pode ser usado a partir de aplicações .NET. Este recurso pode ser particularmente útil em soluções que envolvam a implementação de serviços executados periodicamente; a gravação de informações no Event Viewer ajudaria então administradores de sistema a monitorarem os softwares ativos, conseguindo assim determinar se a operação dos mesmos está dentro do esperado.

Outra consideração importante a ser feita é a respeito do que deverá ou não ser salvo no Visualizador de Eventos. Para a gravação de informações que envolvam operações realizadas numa base relacional, recomenda-se o uso de uma tabela no próprio banco; esta medida contribui para evitar um volume grande de mensagens, sendo que muitas não acrescentariam detalhes significativos aos responsáveis por acompanhar o funcionamento de um software.

Espero que o conteúdo aqui abordado possa lhe auxiliar em algum momento. Até uma próxima oportunidade!

Artigos relacionados