Question

Dans les environnements de journalisation tels que log4j & amp; log4net vous avez la possibilité de connecter différents niveaux d’informations. La plupart des niveaux ont des intentions évidentes (telles que ce qu’est un journal de "débogage" par rapport à une "erreur"). Cependant, une chose sur laquelle j’ai toujours été timide était de classer mon exploitation forestière comme "fatale".

Quels types d’erreurs sont si graves qu’elles devraient être classées comme fatales? Même si cela dépend légèrement des cas, quelles sont certaines des règles empiriques que vous utilisez lorsque vous décidez de consigner une exception comme fatale ou tout simplement une erreur?

Était-ce utile?

La solution

Je considère que les erreurs fatales se produisent lorsque votre application ne peut plus effectuer de travail utile. Les erreurs non fatales surviennent en cas de problème, mais votre application peut toujours continuer à fonctionner, même à un niveau de fonctionnalité ou de performances réduit.

Exemples d'erreurs fatales:

  • Vous manquez d'espace disque sur le périphérique de journalisation et vous devez continuer à vous connecter.
  • Perte totale de connectivité réseau dans une application cliente.
  • Informations de configuration manquantes si aucune valeur par défaut ne peut être utilisée.

Les erreurs non fatales incluent:

  • Un serveur sur lequel une seule session a échoué pour une raison quelconque, mais vous pouvez toujours desservir d'autres clients.
  • Une erreur intermittente, telle qu'une session perdue, si une nouvelle session peut être établie.
  • Informations de configuration manquantes si une valeur par défaut peut être utilisée.

Autres conseils

Une erreur est fatale si quelque chose est manquant ou s'il se produit une situation dans laquelle l'application ne peut tout simplement pas continuer. Les exemples possibles sont un fichier config.file requis manquant ou lorsqu'une exception est déclenchée et est interceptée par un gestionnaire d'exceptions non géré

J'utiliserais fatal si l'étape suivante consiste à fermer l'application ou à ne plus effectuer de travail ultérieur. Si l'application fait partie d'un lot ou si plusieurs processus sont en cours d'exécution, cela peut être utile pour suivre les événements.

S'il existe un risque de récupération (par exemple, une perte de connexion réseau avec de nouvelles tentatives pendant un certain temps), je ne voudrais pas utiliser une stratégie fatale.

Si plusieurs threads de service sont activés par un thread principal et que l'un d'eux échoue à cause d'une mauvaise entrée mais que l'application peut toujours servir de nouvelles demandes, je ne considère pas cela comme fatal.

Pour être bref, cette réponse serait fatale si votre application se bloquait. Si vous ne pouvez pas vous connecter à une ressource importante telle qu'une base de données ou un service requis, ce serait fatal. Globalement, je dirais que si cela empêche votre application de s'exécuter correctement et affecte l'utilisateur, je la classerais comme une erreur fatale.

Mais le moyen le plus important de classer les erreurs est de suivre systématiquement une règle empirique telle que la règle 69 dans Normes de codage C ++ :

  

"Développez une stratégie de traitement des erreurs pratique, cohérente et rationnelle dès le début de la conception, puis respectez-la."

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top