java.util.logging
vous évite d'avoir à transporter un fichier jar de plus avec votre application, et cela fonctionne bien avec un bon formateur.
En général, au sommet de chaque classe , vous devriez avoir:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
Ensuite, vous pouvez simplement utiliser diverses fonctionnalités de la classe Logger .
Utilisez Level.FINE
pour tout ce qui débogue au niveau supérieur du flux d'exécution:
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
Utilisez Level.FINER
/ à l' Level.FINEST
intérieur des boucles et dans des endroits où vous n'aurez pas toujours besoin de voir autant de détails lors du débogage des problèmes de flux de base:
LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
Utilisez les versions paramétrées des fonctions de journalisation pour éviter de générer des tonnes de déchets de concaténation de chaînes que le GC devra suivre. Object[]
comme ci-dessus est bon marché, sur l'allocation de pile généralement.
Avec la gestion des exceptions, enregistrez toujours les détails complets de l'exception:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
Je passe toujours ex.toString()
le message ici, car lorsque je " grep -n
" pour " Exception
" dans les fichiers journaux, je peux aussi voir le message. Sinon, il se trouvera sur la prochaine ligne de sortie générée par le vidage de la pile, et vous devez également disposer d'un RegEx plus avancé pour correspondre à cette ligne, ce qui vous donne souvent plus de sortie que vous n'en avez besoin.