IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

Journalisation avec SLF4J [Tutoriel]


Sujet :

Logging Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Journalisation avec SLF4J
    Bonjour,

    Je viens d'écrire un nouvel article : Journalisation avec SLF4J

    Cet article va vous montrer comment utiliser SLF4J dans votre projet. SLF4J est une couche d'abstraction de journalisation à l'image de Commons Logging, mais avec plusieurs avantages par rapport à ce dernier. Ces avantages sont tous décrits dans l'article ainsi que les différentes fonctionnalités de cette librairie.

    J'espère que cet article vous intéressera.

  2. #2
    Membre du Club
    Profil pro
    dqqds
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : dqqds
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 69
    Points
    69
    Par défaut
    Joli article, clair et précis.

    J'ai juste noté un point, sur l'exemple des messages paramétrés (des plus pratiques une fois qu'on y a pris goût ).
    De mon souvenir (en tout cas avec la version 1.5.10) le code suivant n'est pas valable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    logger.debug("Info : x = {}, y = {}, str = {}", info.getX(), info.getY(), infos.getStr());
    mais doit être écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    logger.debug("Info : x = {}, y = {}, str = {}", new Object[] { info.getX(), info.getY(), infos.getStr() });
    cf. FAQ slf4j.

    Comme tu l'ajoutes dans ta conclusion, je confirme que l'utilisation de l'implémentation logBack est un bon choix. En tout cas, aucun problème à signaler sur nos projets. (Pour rappel, logback est une refonte/ré-écriture de log4j par le créateur de celui-ci).

    Encore bravo pour l'article.
    Nicolas.

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Erf, comme deux arguments marchaient, j'étais sûr qu'ils utilisaient des varargs... Je me demande bien pourquoi il ne les utilise pas d'ailleurs

    Merci de me l'avoir fait remarqué, je vais regarder ça dès que possible

  4. #4
    Membre du Club
    Profil pro
    dqqds
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : dqqds
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 69
    Points
    69
    Par défaut
    pas de varargs... probablement que slf4j reste compatible java 1.4.
    à vérifier

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par miaou_ Voir le message
    pas de varargs... probablement que slf4j reste compatible java 1.4.
    à vérifier
    Faut vivre avec son temps

  6. #6
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    un petit détail me chagrine: LoggerFactory n'est pas clair, clair en ce qui concerne la notion de Logger rattaché à un package.
    petite explication: perso le package est pour moi l'unité fondamentale d'un contexte de logging (oui je sais certains font ça au niveau d'une classe ... mais j'en vois pas l'intérêt au niveau d'un principe général).
    Adoncques: on peut certes utiliser une chaine pour donner un nom, mais j'aurais préféré quequechose du style getLoggerForPackage(un objet simple).
    note: j'ignore tout de Log4j (donc ma remarque attend toute correction utile).
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Effectivement, ce pourrait être quelque chose de pratique pour ceux qui comme dans ton cas font de la journalisation au niveau package, mais je ne connais aucun framework de journalisation qui le fait. A ma connaissance, ni JUL, ni JCL, ni Log4J, ni SLF4J ni LogBack ne le font.

    Tu utilises quoi comme outil de journalisation généralement ?

    A noter quand même que ce n'est pas très difficile d'obtenir un logger pour un package en créant une petit classe utilitaire et une méthode statique getLogger(Package package) ou/et getLoggerForPackage(Class aClass).

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par Baptiste Wicht Voir le message
    Effectivement, ce pourrait être quelque chose de pratique pour ceux qui comme dans ton cas font de la journalisation au niveau package, mais je ne connais aucun framework de journalisation qui le fait. A ma connaissance, ni JUL, ni JCL, ni Log4J, ni SLF4J ni LogBack ne le font.

    Tu utilises quoi comme outil de journalisation généralement ?

    A noter quand même que ce n'est pas très difficile d'obtenir un logger pour un package en créant une petit classe utilitaire et une méthode statique getLogger(Package package) ou/et getLoggerForPackage(Class aClass).
    j'utilise java.util.logging .... et effectivement mon getLogger est un peu particulier (en fait c'est toujours la même expression qui est calculée statiquement au niveau d'une classe standard du package de nom PackCST qui contient tout ce qui concerne le package courant).
    De mémoire ça donne un truc qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class PackCst { // non public
       static final Logger CURLOG = Logger.getLogger(
                             PackCst.class.getPackage().getName()) ;
       // autres inits statiques (ressources, etc....)
    }
    certes ça fait un tas d'init statiques ... mais bof....
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  9. #9
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    pour ce qui est des varargs, je vous laisse lire le debat http://bugzilla.slf4j.org/show_bug.cgi?id=31

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par lunatix Voir le message
    pour ce qui est des varargs, je vous laisse lire le debat http://bugzilla.slf4j.org/show_bug.cgi?id=31
    Intéressant, merci

    Par contre, je trouve dommage que des projets continuent à refuser des changements pour la compatibilité avec une vieille version de Java. la version 1.4.2 a tout de même 2 versions de retards. La version 1.4.2 a tout de même 8 ans et est en EOSL depuis 2 ans.

  11. #11
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Salut je me demande s'il n'y a pas une erreur dans le paragraphe suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous me direz : si Commons Logging fait déjà cela, pourquoi un autre framework d'abstraction de logging ? Tout simplement parce que Commons Logging a ses défauts. Le premier gros défaut de Commons Logging concerne le chargement de l'implémentation de journalisation. En effet, la recherche de l'implémentation se fait dynamiquement à l'implémentation via un système de classloader. Or cette méthode peut poser problèmes dans certaines situations, par exemple lorsque l'application utilise des classloaders personnalisés ou alors au sein d'une architecture OSGi. De plus, l'implémentation utilisée par Commons Logging peut causer des fuites mémoires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    En effet, la recherche de l'implémentation se fait dynamiquement à l'implémentation 
    
    =>
    
    En effet, la recherche de l'implémentation se fait dynamiquement au runtime
    A part ça bravo pour ce tutoriel très clair et très intéressant. Le seul point que je regretterai, c'est qu'il donne tous les avantages de SLF4J par rapport à commons-logging, mais ne donne aucun de ses inconvénients, et pourtant il doit bien y en avoir...
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Journalisation avec DailyRollingFileAppender
    Par Didine981 dans le forum Logging
    Réponses: 1
    Dernier message: 10/11/2009, 16h40
  2. journalisation avec log4j
    Par sir_gcc dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 31/05/2008, 22h47
  3. Pb de journalisation avec Log4j...
    Par cofy dans le forum Logging
    Réponses: 5
    Dernier message: 10/03/2008, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo