précédent | suivant | table des matières |
|
1 Introduction
L'API java.util.logging contient les classes pour gérer simplement des fichiers journaux (fichiers logs) dans lesquels les applications laissent une trace de leur exécution. Les lignes de ces journaux sont habituellement constituées de la date, l'heure, la classe et la méthode où s'est produit l'événement noté dans le journal, et un message. Plusieurs sources : les loggers peuvent écrire dans différents supports : les handlers des messages de différents niveaux.
public static void main(String [] args){ AppliLogging al = new AppliLogging(); al.monLog = Logger.getLogger( AppliLogging.class.getName()); al.monLog.log(Level.INFO, démarrage de l'application"); al.setVisible(true); } |
Permet d'afficher à la console le texte suivant :
12 mai 2010 16:45:56 AppliLogging main
INFO: démarrage de l'application |
Un logger envoie ses messages vers un handler :
|
Les niveaux sont par ordre décroissant :
|
Exemple :
// création d'un Logger et d'un Handler Logger monLog = Logger.getLogger(AppliLogging.class.getName()); monLog.setLevel(Level.ALL); //pour envoyer les messages de tous les niveaux monLog.setUseParentHandlers(false); // pour supprimer la console par défaut ConsoleHandler ch = new ConsoleHandler(); ch.setLevel(Level.INFO); // pour n'accepter que les message de niveau &Ge; INFO monLog.addHandler(ch); // envoi de messages ... monLog.log(Level.WARNING," le message "); monLog.log(Level.SEVERE," le message ", new Exception());// les messages + la pile d'exécution
2 ILa classe Logger
Un logger est obtenu par un appel d'une des méthodes getLogger de la classe Logger. On leur donne habituellement le nom de la classe où ils sont définis. Les noms servent à organiser les logger de façon hiérarchique : il y a un logger racine de nom "", le logger "aaa" a pour parent le logger racine, les loggers de nom "aaa.bbb" et "aaa.ccc" ont pour parent le logger de nom "aaa". Pour un nom donné, il n'y a qu'un seul logger.
Un logger peut être associé à un ResourceBundle pour localiser les messages.
Création d'un logger :
static Logger getAnonymousLogger() |
Création d'un logger anonyme. |
static Logger getAnonymousLogger(String resourceBundleName) |
Création d'un logger anonyme. |
static Logger getLogger(String nom) |
Retourne ou crée le logger de nom nom. |
static Logger getLogger(String name, String resourceBundleName) |
Retourne ou crée le logger de nom nom. |
Les méthodes :
void setLevel(Level l) Level getLevel() |
Modifie ou retourne le niveau du logger |
void addHandler(Handler h) Handler[] getHandlers() void removeHandler(Handler h) |
Ajoute un handler, retourne le tableau des handler affectés à ce logger, supprime un handler. |
void log(Level niveau, String msg) void log(Level niveau, String msg, Object param) void log(Level niveau, String msg, Object[] params) void log(Level niveau, String msg, Throwable thrown) void log(LogRecord lr) |
Envoi d'un message du niveau niveau.Lorsque le dernier paramètre est un objet Throwable, le nom de la classe , le message de l'objet Throwable, et la pile des appels de méthodes sont ajoutés au message. Toutes les méthodes d'envoi de message utilisent la dernière méthode pour configurer le message envoyé. les méthodes logp permettent de spécifier le nom de la classe et le nom de la méthode (si on ne veut pas les noms par défaut). |
void severe(String msg) void warning(String msg) void info(String msg) void config(String msg) void fine(String msg) void finer(String msg) void finest(String msg) |
Chaque méthode permet d'envoyer un message du niveau correspondant à son nom. |
void entering(String nomClasse, String nomMethode) void entering(String nomClasse, String nomMethode, Object p) void entering(String nomClasse, String nomMethode, Object[] p) void exiting(String nomClasse, String nomMethode) void exiting(String nomClasse, String nomMethode, Object p) |
Ces méthodes permettent d'envoyer de messages d'entrée ou de sortie de méthode. Attention, les messages envoyés sont de niveau level.FINER. |
3 Les classes Handler
Les classes Handler sont les classes représentant les différents supports dans lesquels les messages sont écrits. Ces messages sont écrits en utilisant un Formatter. Les classes Handler ont un niveau : les messages d'un niveau inférieur ne sont pas pris en compte. Le format SimpleFormatter est le format par défaut d'un ConsoleHandler et le format XMLFormatter est le format par défaut de FileHandler et SoketHandler. | |
3.0 La classe FileHandler
Le constructeur de FileHandler est :
FileHandler(String pattern, int limit, int count, boolean append)
Dans un pattern on peut utiliser les symboles spéciaux suivants :
Exemples
FileHandler fh = new FileHandler(); |
Création du fichier "java0.log" (0 ou un autre nombre entier) dans le répertoire donné par la propriété "user.home". |
FileHandler fh = new FileHandler("essai%u.log); |
Création du fichier "essai0.log" (0 ou un autre nombre entier) dans le répertoire de travail. |
FileHandler fh = newFileHandler("essai%u.log", 200, 3); |
Création des fichiers "essai0.log.0", éventuellement "essai0.log.1" et "essai0.log.2" dans le répertoire de travail. |
FileHandler fh = new FileHandler();
fh1.setFormatter(new XMLFormatter())) |
FileHandler fh = new FileHandler();
fh1.setFormatter(new SimpleFormatter()) |
<?xml version="1.0" encoding="windows-1252" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2010-05-14T11:25:18<date> <millis>1273829118484</millis> <sequence>0</sequence> <logger>aaa</logger> <level>SEVERE<level> <class>Test$1</class> <method>actionPerformed</method> <thread>10 <message>le message </message> </record> </log> |
14 mai 2010 11:30:49 Test$1 actionPerformed GRAVE: le message |
3.1 La classe SocketHandler
Le constructeur de SocketHandler est :
SocketHandler(String hote, intport)
Ceconstructeur réalise une connexion TCP sur la machine hote, et le port port : les messages seront ensuite envoyés sur ce socket.
3.22 La classe MemoryHandler
La classe MemoryHandler sert à spécifier un tampon mémoire qi est vidé dans un autre Handler.
3.3 La classe ConsoleHandler
La classe ConsoleHandler permet d'envoyer les messages de log à la console. Son niveau par défaut est Level.INFO.
4 La classe Formatter
La classe Formatter permet de formater l'affichage des informations dans le Handler
Exemple un Formatter qui produit du html :
public class HTMLFormatter extends Formatter { // formatage d’une ligne public String format(LogRecord record) { StringBuffer s = new StringBuffer(1000); Date d = new Date(record.getMillis()); DateFormat df = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.MEDIUM, Locale.FRANCE); s.append("<tr><td>" + df.format(d) + "</td>"); s.append("<td><span style=\"font-family:"+ " Courier New,Courier,monospace; color: rgb(204, 0, 0);\">"+ "<b>"+formatMessage(record) + "</b></span></td></tr>\n"); return s.toString(); } // début du fichier de log public String getHead(Handler h) { return "<html>\n<body>\n<table>\n"; } // fin du fichier de log public String getTail(Handler h) { return "</table>\n</body>\n</html>\n"; } } |
Donne un fichier HTML qui a l'apparence suivante :14 mai 2010 14:19:41 le message 1 14 mai 2010 14:19:43 le message 2 14 mai 2010 14:19:45 le message 3 |