Pergunta

Eu trabalhei em lojas onde eu implementadas Manipulação de exceção no log de eventos, e em uma tabela no banco de dados.

Cada um tem seus méritos, dos quais posso destacar alguns com base na minha experiência:

Log de eventos

  • Indústria localização padrão para exceções (+)
  • Facilidade de logging (+)
  • Pode log problemas de conexão de banco de dados aqui (+)
  • relatório de compilação Can e visualização de aplicativos em cima do log de eventos (+)
  • Precisa ser lavada a cada tantas vezes, se um monte é relatado lá (-)
  • Não é tão extensível como o log do SQL [campos add personalizados como nome do método em SQL] (-)

SQL / banco de dados

  • Pode lidar com grandes volumes de dados (+)
  • Pode lidar com inserções de volume rápidas de exceções (+)
  • local de armazenamento para uma única excepção em ambiente de carga equilibrada (+)
  • Muito personalizável (+)
  • Um pouco mais fácil de relatórios build / notificação fora do armazenamento SQL (+)
  • diferente de onde exceções típicas são armazenados (-)

Am I faltando quaisquer considerações importantes?

Tenho certeza de que alguns desses pontos são discutíveis, mas estou curioso o que funcionou melhor para outras equipes, e por que você sente fortemente sobre a escolha.

Foi útil?

Solução

Você precisa diferenciar entre registro e rastreio. Enquanto as linhas são um pouco confuso, eu tendem a pensar de registrar como "coisas não desenvolvedor". Coisas como exceções não tratadas, arquivos corrompidos, etc. Estes são definitivamente não é normal, e deve ser um problema muito freqüente.

O rastreamento é o que um desenvolvedor está interessado. Os rastreamentos de pilha, parâmetros do método, que o servidor web retornou um status HTTP 401.3, etc. Estes são realmente barulhento, e pode produzir uma grande quantidade de dados em um curto espaço de tempo . Normalmente temos diferentes níveis de rastreamento, de cortar o ruído.

Para o log em um aplicativo cliente, eu acho que logs de eventos são o caminho a percorrer (eu teria que verificar novamente, mas acho Monitoramento ASP.NET Saúde pode escrever para o log de eventos também). Os usuários normais têm permissões para gravar o log de eventos, desde que você tem a configuração (que é instalado por um administrador de qualquer maneira) criar a origem do evento.

A maioria de suas vantagens para o log do SQL, embora verdadeira, não são aplicáveis ??a registro de eventos:

  • Pode lidar com grandes volumes de dados: Você realmente tem grandes volumes de exceções não tratadas ou outras falhas de alto nível?
  • Pode lidar com inserções de volume rápidas de exceções: A única excepção não deve trazer seu aplicativo para baixo - é inerentemente taxa limitada. Outros eventos interessantes para não desenvolvedores deve ser semelhante agregados.
  • Muito personalizável: A mensagem em um log de eventos é muito bonito texto livre. Se precisar de mais informações, basta apontar para um texto ou XML estruturado ou log de arquivo binário
  • Um pouco mais fácil de relatórios build / notificação fora do armazenamento SQL: Relatórios é construído com o Visualizador de Log de eventos e sistemas de notificação são, seja inerente - devido a uma falha de aplicativo - ou misturado com outros realmente crítico notificações - há pouco desculpa para faltar uma mensagem de log de eventos. Para aplicativos em rede corporativa ou outros, há um mil e 1 aplicativos diferentes que já abate de logs de eventos para erros ... as chances são o seu sysadmin já está usando um.

Para traçado , dos quais os detalhes específicos de uma exceção ou erros é uma parte, eu como arquivos simples - eles são fáceis de manter, fácil de grep, e pode ser importado para Sql para análise se eu gosto.

90% do tempo, você não precisa deles e eles estão pronto para avisar ou ERROR. Mas, quando você configurá-los para INFO ou DEBUG, você vai gerar um tonelada de dados. Um RDBMS tem um monte de sobrecarga - para o desempenho (ACID, simultaneidade, etc.), armazenamento (logs de transação, SCSI RAID-5 discos, etc.), e administração (backups, manutenção do servidor, etc.) - todos os quais são desnecessário para logs de rastreamento.

Outras dicas

Eu não log até para o banco de dados. Como você disse, as questões do banco de dados se tornar complicado para log:)

Gostaria de log para o sistema de arquivos, e depois ter um trabalho que Bulk-inserções de arquivos para o banco de dados. Pessoalmente eu gosto de ter os registros no banco de dados no log executar principalmente para a situação de escala - Eu praticamente suponho que vou ter mais de uma máquina rodando, e é útil para ser capaz de ter efetivamente um registro combinado. (Cada entrada deve indicar a máquina vem, é claro.)

Relatório e aplicativos de visualização pode ser feito muito facilmente a partir de um banco de dados -. Pode haver menos ferramentas de relatórios lá fora, no momento, mas praticamente todos os bancos de dados generalizaram Reportagem Especializada-log funcionalidade

Para facilitar a extração de madeira, eu usaria um quadro como log4net que leva uma grande parte do esforço fora dele, e é uma solução experimentada e testada. Além do mais, isso significa que você pode mudar a sua estratégia de saída com nenhuma alteração de código. Você poderia até mesmo log para o log de eventos eo banco de dados, se necessário, ou enviar alguns registros para um lugar e alguns para o outro. (Eu tenho assumido NET aqui, mas existem estruturas de registo semelhantes para várias plataformas.)

Uma coisa que precisa considerar sobre o registo de eventos é que existem produtos lá fora, que pode monitorar logs de eventos de seus servidores (como o Microsoft Operations Manager) e inteligentemente fazer a notificação, e reunir estatísticas sobre o seu conteúdo.

A "menos" de exploração madeireira baseada em SQL é que ele acrescenta outra camada de dependências para a sua aplicação, que pode ou não pode ser sempre aceitável. Eu tenho feito tanto em minha carreira. I uma ou duas vezes até usou um MSMQ baseada em mensagens fila para eventos de registro de fila e esvaziar a fila em um banco de dados MSSQL para eliminar a necessidade para o meu software cliente para ter uma conexão com o DB.

Uma nota sobre a escrita no log de eventos:. Que requer determinadas permissões para usuários do aplicativo que em alguns ambientes pode ser restringido por padrão

Onde eu estou fazemos a maioria de nosso registro para um banco de dados, com arquivos simples como backup. É muito bom, podemos fazer coisas como obter um feed RSS para um aplicativo para assistir por alguns dias quando nós fazer uma mudança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top