Le potentiel des enum pour les Logs et messages d'erreur

Dernièrement j'ai travaillé sur la gestion des erreurs et des logs dans un très grand projet. Une des bonnes pratiques que j'ai pu connaître, est de regrouper tous les messages de logs, exceptions ou autres de la librairie en développement dans un Enum. Ceci permet de forcer les développeurs a définir toutes les propriétés requises, et de respecter la structure des messages de log et d'exception établit, ainsi que l'utilisation de ces derniers dans les logs et exceptions.

Un bon exemple d'un message descriptif, bien structuré, à produire dans la log ou pour décrire une exception peut être le suivant. Un message qui contient son code, son libellé, l'impact et l'action, sous la forme : code - libellé | impact | action.
Le code du message peut être préfixé par le package ou composant qui produit l'erreur.

Le code source java doit référencer l'une des valeurs énumérées de notre classe de Log, (donc pour un nouveau message créer une nouvelle valeur) ; cela permet ensuite de pouvoir trouver où sont utilisés chaque message (Référence / Workspace), de les renommer sans risque, ...

La déclaration de la valeur est en fait un appel à un constructeur à qui l'on passe le code du message, le libellé du message, l'impact de la cause du message (sous forme de valeur d'une énumération), et l'action à entreprendre suite au message (sous forme de valeur d'une énumération).

Pour raison de performance, on n'utilise pas de fichier de propriétés pour associer le libellé au code, ceci est fait directement dans la classe. L'impact et l'action sont des énumérations internes, qu'il convient d'utiliser ou de compléter. Leurs déclarations de valeurs sont aussi des constructeurs auxquels on passe une description courte et une description longue, la première devant être incluse dans le message de log.

Les valeurs énumérées et les descriptions sont en français. On peut créer une interface de cette classe Log, Ilog, est écrire une implementation pour chaque langue supporté par notre application. Après par fichier de configuration on pourrait désigner une implementation ou une autre à instancier pour notre application installé.

Se référer à Enums pour une explication sur l'utilisation avancée des énumérations.

Comentarios