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.
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.
Si tu as deux classes Mere et Fille, tu peux faire ça :
La partie importante du code est ici le getClass().getSuperclass() qui renvoie le parent de la classe sur laquelle on travaille.
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(); } }
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).Envoyé par drim
Bon courage !
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é.
Partager