Pergunta

Em registrando frameworks como log4j e log4net você tem a capacidade de registrar vários níveis de informação. A maioria dos níveis têm intenções óbvias (tais como o que é um log "Debug" é contra um "erro"). No entanto, uma coisa que eu sempre fui tímido sobre se classificar meu logging como "Fatal".

Que tipo de erros são tão graves que devem ser classificados como fatal? Embora este seja um pouco caso impulsionado, quais são algumas das regras de polegar que você usa quando decidir entre registrando uma exceção como fatal ou simplesmente erro?

Foi útil?

Solução

Eu considero erros fatais para ser quando a sua aplicação não pode fazer qualquer trabalho mais útil. erros não fatais são quando há um problema, mas a sua aplicação ainda pode continuar a funcionar, mesmo em um nível reduzido de funcionalidade ou desempenho.

Exemplos de erros fatais incluem:

  • Running out of espaço em disco no dispositivo de registro e você é obrigado a manter o registo.
  • Perda total da conectividade de rede em um aplicativo cliente.
  • A falta de informações de configuração se nenhum padrão pode ser utilizado.

Os erros não-fatais que incluem:

  • Um servidor onde uma única sessão falhar por algum motivo, mas você ainda pode atender outros clientes.
  • Um erro intermitente, como a sessão perdida, se uma nova sessão pode ser estabelecida.
  • A falta de informações de configuração se um valor padrão pode ser utilizado.

Outras dicas

Um erro é fatal se algo está faltando ou ocorre uma situação para a qual o aplicativo simplesmente não pode continuar. Exemplos possíveis são uma config.file necessário em falta ou quando uma exceção 'bolhas' e é capturado por um manipulador de exceção não tratada

Gostaria de usar fatal se o meu próximo passo é a aplicação para terminar, ou simplesmente não fazer qualquer trabalho mais posterior. Se o aplicativo é parte de um lote ou existem vários processos em execução, isso pode ser útil para rastrear o que aconteceu.

Se houver uma chance de recuperação (por exemplo, perda de conexão de rede com novas tentativas por um tempo) eu não iria usar um fatal.

Se eu tiver vários segmentos de serviços ativados por um segmento principal e um deles falhar devido a alguma entrada ruim, mas o aplicativo ainda pode servir novos pedidos, eu não considero fatal.

Para fazer esta resposta curta e doce, se seu aplicativo trava, eu consideraria que fatal. Se você não pode se conectar a um recurso importante, como um banco de dados ou um serviço obrigatório, que seria fatal. No geral, eu diria que se ele mantém o seu aplicativo seja executado corretamente e afeta o usuário, gostaria de classificá-lo como um erro fatal.

Mas a forma mais importante de erros Classificar é seguir de forma consistente uma regra de ouro, como regra 69 em C ++ Coding Standards :

"Desenvolver uma política de tratamento de erros prática, consistente e racional no início de design, e depois cumpri-lo."

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