Bons exemples d’utilisation de java.util.logging

Je veux utiliser des journaux dans mon programme. J’ai entendu parler de java.util.logging , mais je ne sais pas comment commencer.

Existe-t-il des exemples de ce que je peux faire avec la journalisation? Comment pourrais-je utiliser la journalisation dans mon propre programme?

java.util.logging vous java.util.logging d’avoir à ranger un fichier jar supplémentaire avec votre application, et cela fonctionne bien avec un bon formateur.

En général, au sumt de chaque classe , vous devriez avoir:

 private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() ); 

Ensuite, vous pouvez simplement utiliser différentes fonctions de la classe Logger .


Utilisez Level.FINE pour toute opération de débogage au niveau supérieur du stream d’exécution:

 LOGGER.log( Level.FINE, "processing {0} ensortinges in loop", list.size() ); 

Utilisez Level.FINER / Level.FINEST intérieur des boucles et dans des endroits où vous n’avez pas toujours besoin de voir autant de détails lors du débogage des problèmes de stream 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 GC devra suivre. Object[] comme ci-dessus est bon marché, sur l’allocation de stack en général.


Avec la gestion des exceptions, connectez-vous toujours les détails complets de l’exception:

 try { ...something that can throw an ignorable exception } catch( Exception ex ) { LOGGER.log( Level.SEVERE, ex.toSsortingng(), ex ); } 

Je passe toujours ex.toSsortingng() comme le message ici, car alors quand je ” grep -n ” pour ” Exception ” dans les fichiers journaux, je peux voir le message aussi. Sinon, il sera sur la ligne de sortie suivante générée par le vidage de la stack, et vous devez disposer d’un RegEx plus avancé pour correspondre à cette ligne, ce qui vous permet souvent d’obtenir plus de résultats que nécessaire.

Doit déclarer un enregistreur comme ceci:

 private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName()); 

donc si vous refactorez le nom de votre classe, il suit.

J’ai écrit un article sur java logger avec des exemples ici .

Il existe de nombreux exemples et différents types de journalisation. Consultez le package java.util.logging .

Exemple de code:

 import java.util.logging.Logger; public class Main { private static Logger LOGGER = Logger.getLogger("InfoLogging"); public static void main(Ssortingng[] args) { LOGGER.info("Logging an INFO-level message"); } } 

Sans coder en dur le nom de la classe :

 import java.util.logging.Logger; public class Main { private static final Logger LOGGER = Logger.getLogger( Thread.currentThread().getStackTrace()[0].getClassName() ); public static void main(Ssortingng[] args) { LOGGER.info("Logging an INFO-level message"); } } 

SLF4J est une meilleure façade de journalisation que Apache Commons Logging (ACL). Il a des passerelles vers d’autres structures de journalisation, effectuant des appels directs à ACL, Log4J ou Java Util Logging via SLF4J, de sorte que vous puissiez diriger toutes les sorties vers un fichier journal si vous le souhaitez, avec un seul fichier de configuration. Pourquoi votre application utiliserait-elle plusieurs infrastructures de journalisation? Parce que les bibliothèques tierces que vous utilisez, surtout les plus anciennes, le font probablement.

SLF4J prend en charge diverses implémentations de journalisation. Il peut tout sortir en sortie standard, utiliser Log4J ou Logback (recommandé sur Log4J).

http://www.slf4j.org/

http://logback.qos.ch/

J’utiliserais Minlog , personnellement. C’est extrêmement simple, car la classe de journalisation contient quelques centaines de lignes de code.

Je suggère que vous utilisiez l’utilitaire de journalisation Apache’s commons. Il est hautement évolutif et prend en charge des fichiers journaux séparés pour différents enregistreurs. Voir ici