Un bon système des logs est vital pour un bon fonctionnement d'une application web. C'est lui qui permet de suivre tout ce que font les utilisateurs. Il est donc un élément très important pour garantir une bonne maintenabilité de l'application.
Le logging du Java a été défini dans la spécification J2SE. Ce document a pour but de clarifier tout l'éco-système de cette fonctionnalité.
Fonctionnement du Logger en Java
Le flux de contrôle est composé d'un Logger et Handler. Le premier est appelé par l'application pour prendre en charge le message à sauvegarder. Il le passe à Handler qui s'occupe de sauvegarder physiquement le message sur un support précis (fichier, mémoire, socket, stream, console).
Chaque Handler est accompagné d'un Formatter dont le rôle consiste à traduire le message en format faciliement lisible par un humain.
Le message sauvegardé peut avoir un niveau d'importance appartenant à la classe java.util.logging.Level. Les valeurs possibles sont (entre parenthèses est indiqué le niveau d'importance - 7 le plus important, 1 le moins important) :
- SEVERE (7)
- WARNING (6)
- INFO (5)
- CONFIG (4)
- FINE (3)
- FINER (2)
- FINEST (1)
Exemple du Logger en Java
L'exemple d'une classe de log ressemble à une classe qui gère la sauvegarde des données dans un fichier. Toutes les classes des logs sont comprises dans le package java.util.logging. Voici comment ses composants peuvent être rassemblés :
import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class LoggerExemple { public static void main(String[] args) { Logger logger = Logger.getLogger("logg"); FileHandler fileHandler; try { fileHandler = new FileHandler("C:\\logfile.log", true); logger.addHandler(fileHandler); logger.setLevel(Level.ALL); SimpleFormatter formatter = new SimpleFormatter(); fileHandler.setFormatter(formatter); logger.log(Level.WARNING, "Warning message"); logger.log(Level.SEVERE, "Severe message"); logger.log(Level.INFO, "Info message from Throwable object", new Throwable("Throwable exception")); } catch (SecurityException se) { System.out.println("SecurityException was catched " + se.getMessage()); } catch (IOException ioe) { System.out.println("IOException was catchted " + ioe.getMessage()); } } }
Et voici le résultat dans le fichier logfile.log :
déc. 12, 2012 2:47:43 AM LoggerExemple main WARNING: Warning message déc. 12, 2012 2:47:43 AM LoggerExemple main SEVERE: Severe message déc. 12, 2012 2:47:43 AM LoggerExemple main INFO: Info message from Throwable object java.lang.Throwable: Throwable exception at LoggerExemple.main(LoggerExemple.java:22)
Plusieurs systèmes des logs open source existent pour Java. Un parmi eux, log4j, est utilisé en tant que systèmes des logs dans application Spring.