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

Langage Java Discussion :

Savoir "qui" appelle une méthode ? [FAQ]


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut Savoir "qui" appelle une méthode ?
    Bonjour !

    Voilà, j'ai une petite classe qui gère le log tel que (vraiment pour résumer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class MonLog {
     public void log(String msg){
      System.out.println(msg);
     }
    }
    Je voudrais pouvoir ajouter, devant le message, le nom de la classe (voire de la méthode) qui appelle log (dans le style d'un stackStrace), en évitant si possible de toucher à toutes les autres classes.

    Est-ce possible ? Merci !

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Remplace les appels à ta "méthode de log" par l'utilisation de Log4J qui le fait tout seul pour toi (voire conjointement avec Jakarta Commons Logging c'est mieux).

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Salut,
    pour afficher le nom de la classe tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String classname = this.getClass().getName();
    Pour la méthode je ne sais pas comment faire mais il doit y avoir une astuce du même genre.

    A+

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser directement le stacktrace (Java 5.0) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public void log(String msg) {
    		StackTraceElement[] stack = Thread.currentThread().getStackTrace();
    		StackTraceElement previous = stack[2];
     
    		System.out.println(previous + " : " + msg);
    	}
    Avec une version précédente à Java 5 tu dois passer par un Throwable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public void log(String msg) {
    		StackTraceElement[] stack = new Throwable().getStackTrace();
    		StackTraceElement previous = stack[1];
     
    		System.out.println(previous + " : " + msg);
    	}
    Par contre il faut bien savoir que la génération de ce stacktrace est plutôt couteuse, et qu'il ne faut pas en abuser (surtout en prod).

    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Merci pour les réponses !
    Mon code était un résumé, puisqu'en réalité nous utilisons la classe Logger (mais ce n'est pas moi qui me suis occupé de cette partie, je ne pourrais pas en dire davantages lol), mais je regarderais quand même "Log4J".
    Pour le string getClass.getName(), cela m'obligeait à remplacer tous les appels au log :/

    Donc en attendant, je vais tester avec les stackTrace (même si du coup, ca risque de devenir trop gourmand :/)

    Merci encore !

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

Discussions similaires

  1. Récupérer l'assembly qui a appelé une méthode
    Par bossun dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/07/2010, 18h08
  2. [Introspection] Savoir quelle classe a appelé une méthode
    Par muad'dib dans le forum Général Java
    Réponses: 2
    Dernier message: 26/11/2008, 16h34
  3. Réponses: 2
    Dernier message: 19/10/2006, 15h29

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