© Philippe GENOUD UJF Janvier 2007
1
API Logging
Journalisation des évènements
API Logging
Journalisation des évènements
© Philippe GENOUD UJF Novembre 2008
2
Journalisation
Journalisation
Conserver sur un support sûr des événements survenus dans un système
ou une application
Un ou plusieurs fichiers journaux (log files) générés en cours d'exécution
enregistrent des informations sur le déroulement de l'application.
Nature de l'événement
Date et heure
Gravité
Utilisateur….
Utilisés pour :
Produire des statistiques sur utilisation du système (ex: log du
serveur Apache)
Détecter des problèmes d'exécution
Reprise après pane
© Philippe GENOUD UJF Novembre 2008
3
Api java.util.logging
Api java.util.logging
Java depuis la version 1.4 propose une API standard pour journaliser les
événements.
Définie dans le package java.util.logging
D'usage simple
Permet de journaliser des événements dans un fichier au format texte
ou XML
Différents niveaux de sévérité applicables aux messages journalisés
API conçue pour rendre les opérations de logging le moins coûteuses
possible
Possibilité de changer dynamiquement quels niveaux de
messages sont journalisés
Permet de faire des logging détaillés lorsque nécessaire tout en
minimisant l'impact sur l'application en mode normal
Extensible
© Philippe GENOUD UJF Novembre 2008
4
Api java.util.logging
Api java.util.logging
Principale classes de l'API java.util.logging
Logger
Logger LogRecord
LogRecord Handler
Handler
MemoryHandler
MemoryHandler StreamHandler
StreamHandler
Formatter
Formatter
ConsoleHandler
ConsoleHandler FileHandler
FileHandler SocketHandler
SocketHandler
SimpleFormatter
SimpleFormatter XMLFormatter
XMLFormatter
Object
Object
Génère log
messages
Encapsule
contenu
d'un log
message
Destination
pour les
LogRecords
Associés aux
handlers pour
formater les
LogRecords
LogManager
LogManager
<interface>
Filter
<interface>
Filter
© Philippe GENOUD UJF Novembre 2008
5
Principes généraux de l'API Logging
Principes généraux de l'API Logging
Handler
Logger Handler
Filter FormatterFilter
FormatterFilter
1
Application 2
3
4
5 6
7
Monde extérieur
Fichier
Console
Socket
1L'application demande à un Logger d'enregistrer une information dans le journal
2Le Logger crée un objet LogRecord qui représente cette demande
3Le Logger transmet éventuellement le LogRecord à un filtre pour décider si il doit être traité ou non
Si le filtre autorise son traitement le LogRecord est transmis à un Handler.
4
5Le Handler transmet éventuellement le LogRecord à un filtre pour décider si il doit être traité ou non
6Si le filtre autorise son traitement le LogRecord est transmis à un Formatter qui se charge de
sa mise en forme et de son éventuelle localisation
7Le Handler publie lerésultat produit par le Formatter sur un flux d'entrée/sortie
À un Logger peuvent être
associés plusieurs handlers
© Philippe GENOUD UJF Novembre 2008
6
Création d'un journal
Création d'un journal
Journal représenté par un objet instance de la classe Logger
Doit être créé qu'une seule fois et partagé par les instances des
différentes classes de l'application
Accès au journal dans une classe
private static Logger logger =
Logger.getLogger("monLogger");
Référence statique pour accéder
au journal
Méthode statique de la classe Logger.
Nom du journal
si plusieurs classes appellent
getLogger()
avec le même
nom, le journal est créé au premier appel ; pour les
prochains appels le journal n'est pas recréé, seule sa
référence est retournée .
© Philippe GENOUD UJF Novembre 2008
7
Création d'un journal
Création d'un journal
Une fois le journal (Logger) créé il faut l'associer à un ou plusieurs
handlers qui géreront les messages (LoggerRecords)
Pour rediriger les messages du logger vers un fichier on utilise un
objet FileHandler
Handler fh = new FileHandler("myLog.log");
logger.addHandler(fh);
Création d'un file Handler qui redirigera les
LoggerRecords vers vers le fichier myLog.log
Associe le FileHanlder au logger
Handler fh = new FileHandler();
Système choisit lui-même le nom du fichier
Le fichier est repris tel quel (true) ou recrée (false)
Le journal est divisé en 4 fichiers de 5000 octets,
utilisés de manière cyclique,de nom myLog.log.i avec
ide 0à3(motif par défaut)
Handler fh = new FileHandler("myLog.log", true);
Handler fh = new FileHandler("myLog.log", 5000, 4);
Plusieurs constructeurs permettent de spécifier le ou les fichiers utilisés et la manière dont ils le sont.
© Philippe GENOUD UJF Novembre 2008
8
Création d'un journal
Création d'un journal
public FileHandler(String pattern,int limit,int count,
boolean append)
pattern : motif du nom du fichier ou des fichiers à créer
limit : nombre maximum d'octets pouvant être écrits dans le fichier (0 pour pas
de limite). Si cette limite est dépassée, le FileHandler ferme le fichier, le
renomme et débute un nouveau fichier de log avec le nom original
count : nombre de fichiers à utiliser
append : le fichier est repris tel quel (true) ou recrée (false)
Lorsque ces arguments ne sont pas spécifiés dans le constructeur, une valeur par
défaut définie par le LogManager est utilisée.
pattern : %h/java%u.log
limit : 0
count : 1
append : false
© Philippe GENOUD UJF Novembre 2008
9
Création du journal
Création du journal
Des caractères spéciaux peuvent être utilisés pour définir le nom du (des)
fichier(s) de log
Caractère
/
%h
%t
%u
%g
%%
Signification
Séparateur de répertoire pour la plateforme
Répertoire de connexion de l'utilisateur (équivalent de la propriété système
"user.home")
Répertoire temporaire du système
Un nombre unique utilisé pour distinguer le fichier log d'autres fichiers log qui
auraient le même motif
Le nombre généré automatiquement pour la rotation cyclique des fichiers
quand limit non nul et count > 1
'%'
Exemple
Handler fh = new FileHandler("%h/myApps.%g.log", 5000, 3);
3 fichiers logs dans le "homedir" de l'utilisateur nommés mYApps.0.log, myApps.1.log et
myApps.2.log
© Philippe GENOUD UJF Novembre 2008
10
Ecriture d'un message
Ecriture d'un message
Pour poster un message dans le journal on utilise la méthode log() de
l'objet Logger.
Le type Level définit 7 + 2 niveaux pour les messages. Les niveaux sont
ordonnés : lorsque le Logger est activé pour un niveau tous les niveaux
supérieurs le sont également
public void log(Level level, String msg)
Niveau du message. Si le logger est activé pour ce niveau le
message est dirigé vers tous les handlers associés au logger,
sinon le message est ignoré
Le message
Niveau Description
OFF Aucun niveau
SEVERE Pour indiquer un problème sérieux
WARNING Pour signaler un problème potentiel
INFO Message d'information
CONFIG Configuration
FINE Trace d'exécution
FINER Trace d'exécution plus précise
FINEST Trace d'exécution encore plus précise
ALL Tous les niveaux
Les niveaux dans
l'ordre décroissant
Niveau par défaut
La méthode
void setLevel(Level newLevel) de
la classe Logger permet de modifier le
niveau pour lequel le journal est activé.
Exemple : pour logger tous les messages
logger.setLevel(Level.ALL)
1 / 11 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !