Accueil > Java > Log4J : données contextuelles

Log4J : données contextuelles

Log4J est un composant de Log qui s’est imposé de manière universelle dans le monde Java, je l’utilise depuis mon premier projet Java en 2001 (oh my god).

Cela fait quand même du bien de se replonger dans sa documentation de temps en temps, j’ai cette fois ci été attiré par les composants qui permettent d’ajouter des données contextuelles aux traces.

En effet, le besoin de rajouter ce type de données pour faciliter la corrections de bugs est récurent, ces données peuvent aller de l’identifiant de l’utilisateur au processus applicatif en cours en passant par la version de l’application, les besoins et solutions sont variés.

Log4J offre deux composants qui remplissent ce rôle de manière élégante :

Le NDC est une pile qui permet de stocker des messages contextuels, ces messages sont stockés par Thread et sont donc (par exemple) partagés durant l’exécution d’une requête HTTP par un moteur de servlet.

La méthode push permet de rajouter un message en haut de la pile, la méthode pop permet de dépiler d’un niveau.

Pour ajouter le contenu du NDC dans un PatternLayout, il faut ajouter la variable %x au pattern.

Par exemple, cette séquence d’appels :

Logger logger = Logger.getLogger("foo");
logger.info("homepage");
NDC.push("ClientID : " + clientId);
logger.info("client identifié");
NDC.push("Process : Commande de chequier");
logger.info("Nb de chequiers commandés: " + nbChequiers);

associée à ce pattern Log4J :

log4j.appender.STDOUT.layout.ConversionPattern=%-5p %c [%x] %m%n

génère la sortie suivante :


INFO  foo [] homepage
INFO  foo [ClientID : 123456] client identifié
INFO  foo [ClientID : 123456 Process : Commande de chequier] Nb de chequiers
  commandés: 2
INFO  foo [ClientID : 123456 Process : Demande de RIB] Code IBAN : 441 45645
  6456 45645645 456

A l’instar du NDC, le MDC est un espace de stockage propre à un Thread, cependant cet espace de stockage est réalisé à l’aide d’une Map et non pas d’une pile. Il permet donc d’associer des messages à des clefs et de spécifier dans le pattern quelles clefs sont à afficher.

Par exemple, cette séquence d’appels :

logger.info("homepage");
MDC.put("ClientID", clientId);
logger.info("client identifié");
MDC.put("Process","Commande de chequier");
logger.info("Nb de chequiers commandés: " + nbChequiers);
MDC.put("Process","Demande de RIB");
logger.info("Code IBAN : " + codeIBAN);

Associée au pattern :

log4j.appender.STDOUT.layout.ConversionPattern=%-5p %c
    [Client:%X{ClientID}] [Process:%X{Process}] %m%n

Produira ces traces :

INFO  foo [Client:123456] [Process:] client identifié
INFO  foo [Client:123456] [Process:Commande de
     chequier] Nb de chequiers commandés: 2
INFO  foo [Client:123456] [Process:Demande de RIB] Code IBAN :
     441 456456456 45645645 456
  1. Gabriel K.
    11 mars 2008 à 08:48

    Très joli! ET très instructif. Merci beaucoup
    J’utilise comme tout le monde log4j et n’y ai toujours rien compris! Chaque fois c’est la méthode à Toto, essayer jusqu’à ce que ça marche!

  2. traore
    21 avril 2008 à 15:51

    Bonjour,
    J’ai une question sur log4J
    Savez-vous comment compiler une seule classe java avec log4J de préférence, depuis le DOS?
    « javac -???? NomClasse.java ».
    Merci de votre aide

  3. Thomas Recloux
    23 avril 2008 à 16:29

    Il faut ajouter le jar de log4j au classpath, soit vie la variable d’environnement CLASSPATH, soit directement en option de javac, comme ci dessous :
    javac -classpath libs\log4j-1.2.15.jar LogTest.java

    Je vous conseille d’utiliser des outils comme ant ou maven pour automatiser votre processus de compilation.

  4. 15 juin 2008 à 19:17

    vous savez n’importe quelles informations sur ce sujet dans d’autres langues

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :