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 :

Log4J Logger le nom de la classe parent


Sujet :

Logging Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Points : 29
    Points
    29
    Par défaut Log4J Logger le nom de la classe parent
    Bonjour,

    voila j'ai fait un service de log qui utilise log4J. Cependant, dans les logs, j'aimerais enregistrer le nom de class parent qui instancie mon service.

    Savez-vous si cela est possible ? Si oui, comment ?

    Merci d'avance
    Jérémy.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Si tu as deux classes Mere et Fille, tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ... // imports
     
    class Mere {
    }
     
    public class Fille extends Mere {
      private Logger log = Logger.getLogger(getClass().getSuperclass());
      void test () {
        log.trace("<<-- Nom de mon parent");
      }
      public static void main (String[] args) {
        new Fille().test();
      }
    }
    La partie importante du code est ici le getClass().getSuperclass() qui renvoie le parent de la classe sur laquelle on travaille.

  3. #3
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Citation Envoyé par drim
    Cependant, dans les logs, j'aimerais enregistrer le nom de class parent qui instancie mon service.
    Si c'est la classe qui effectue l'instanciation de ton objet en cours, alors il faut que tu passes par une exception sur laquelle tu récupères la stack. Il ne te reste plus alors qu'à regarder l'avant dernier élément de la stack pour voir quel est la classe qui a instancié ton objet (si tu es dans ton constructeur ou méthode factory bien-sur).

    Bon courage !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé cette méthode pour logger la classe et la méthode:

    public static String getClass(Thread callingThread) {
    String callingClassName = MyLog.label_UnknownClass;
    if (callingThread != null) {
    // try and get the calling class name
    try {
    callingClassName = callingThread.getStackTrace()[3].getClassName();
    } catch (Exception e) {
    // no worries, just don't indicate the calling method
    callingClassName = MyLog.label_UnknownClass;
    }
    }
    return callingClassName;
    }

    /**
    */
    public static String getMethod(Thread callingThread) {
    String callingMethodName = MyLog.label_UnknownMethod;
    if (callingThread != null) {
    // try and get the calling method name
    try {
    callingMethodName = callingThread.getStackTrace()[3].getMethodName();
    } catch (Exception e) {
    // no worries, just don't indicate the calling method
    callingMethodName = MyLog.label_UnknownMethod;
    }
    }
    return callingMethodName;
    }

    L'appel à ces méthode se fait par :
    MyLog.getClass(Thread.currentThread())

    Y a peut être mieux, mais pour l'instant c'est ce que j'ai trouvé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Log4J] Utilité du nom de la classe dans getLogger
    Par 0redd dans le forum Logging
    Réponses: 2
    Dernier message: 11/08/2011, 22h47
  2. Nom classe parente
    Par Pendary dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/08/2007, 13h58
  3. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  4. Récupérer les noms des classes parents
    Par see++ dans le forum Général Python
    Réponses: 2
    Dernier message: 12/03/2007, 17h35
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

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