OVH Cloud OVH Cloud

[log]logguer l'appelant

7 réponses
Avatar
François-Xavier GENDRIN
Bonjour,
J'ai cherché sur le net et rien dessus ...

Je cherche le moyen par lequel Log4J arrive à trouver la méthode
appelante, la classe et la ligne dans le source.


Merci de votre aide si vous avez déjà trouvé cette astuce.

7 réponses

Avatar
mtp
Bonjour,
J'ai cherché sur le net et rien dessus ...

Je cherche le moyen par lequel Log4J arrive à trouver la méthode
appelante, la classe et la ligne dans le source.


Merci de votre aide si vous avez déjà trouvé cette astuce.


je ne sais pas pour Log4J mais tu peux faire qqc qui ressemble à:

public void log() {
StackTraceElement appelant = null;
try {
throw new Exception();
} catch (Exception ex) {
StackTraceElement[] trace = ex.getStackTrace();
if (trace != null)
appelant = trace[1]; // ou length - 1, je ne sais plus
}

if (appelant != null) {
...
}
}

Avatar
François-Xavier GENDRIN
Bonjour,
J'ai cherché sur le net et rien dessus ...

Je cherche le moyen par lequel Log4J arrive à trouver la méthode
appelante, la classe et la ligne dans le source.


Merci de votre aide si vous avez déjà trouvé cette astuce.


je ne sais pas pour Log4J mais tu peux faire qqc qui ressemble à:

public void log() {
StackTraceElement appelant = null;
try {
throw new Exception();
} catch (Exception ex) {
StackTraceElement[] trace = ex.getStackTrace();
if (trace != null)
appelant = trace[1]; // ou length - 1, je ne sais plus
}

if (appelant != null) {
...
}
}
Merci l'idée est bonne, je la met de côté.


c'est un peu "couteux" de lever une exception ?

N'y a t-il rien de plus "propre" ?


Avatar
alexandre cartapanis
Bonjour,
J'ai cherché sur le net et rien dessus ...

Je cherche le moyen par lequel Log4J arrive à trouver la méthode
appelante, la classe et la ligne dans le source.


Merci de votre aide si vous avez déjà trouvé cette astuce.


je ne sais pas pour Log4J mais tu peux faire qqc qui ressemble à:



Log4j fais comme ça. Je crois que java.logging aussi.

Peut être que certaines méthodes natives de la JVM le permettent, mai s
je ne la connais pas... Et encore, ça doit dépendre de la jvm.

public void log() {
StackTraceElement appelant = null;
try {
throw new Exception();
} catch (Exception ex) {
StackTraceElement[] trace = ex.getStackTrace();
if (trace != null)
appelant = trace[1]; // ou length - 1, je ne sais plus
}

if (appelant != null) {
...
}
}



--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email


Avatar
Lambda
"François-Xavier GENDRIN" wrote in
message news:e3frhb$gb5$
Bonjour,
J'ai cherché sur le net et rien dessus ...

Je cherche le moyen par lequel Log4J arrive à trouver la méthode
appelante, la classe et la ligne dans le source.


Merci de votre aide si vous avez déjà trouvé cette astuce.


je ne sais pas pour Log4J mais tu peux faire qqc qui ressemble à:

public void log() {
StackTraceElement appelant = null;
try {
throw new Exception();
} catch (Exception ex) {
StackTraceElement[] trace = ex.getStackTrace();
if (trace != null)
appelant = trace[1]; // ou length - 1, je ne sais plus
}

if (appelant != null) {
...
}
}
Merci l'idée est bonne, je la met de côté.


c'est un peu "couteux" de lever une exception ?

N'y a t-il rien de plus "propre" ?


Si : la version raccourcie de ce qu'il y a au-dessus :
StackTraceElement appelant=(new Exception()).getStackTrace()[1].

Il n'est pas necessaire de lever l'exception puisque tu lances un objet et
que tu recuperes le meme...



Avatar
David
Le Fri, 05 May 2006 17:38:20 +0200, François-Xavier GENDRIN a écrit :
Merci l'idée est bonne, je la met de côté.

c'est un peu "couteux" de lever une exception ?

N'y a t-il rien de plus "propre" ?


AVec Java Util Logging
http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/LogRecord.html#getSourceMethodName()

Avatar
François-Xavier GENDRIN
Merci l'idée est bonne, je la met de côté.

c'est un peu "couteux" de lever une exception ?

N'y a t-il rien de plus "propre" ?


AVec Java Util Logging
http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/LogRecord.html#getSourceMethodName()


Oui mais pour "nourrir" la classe il faut utiliser les setX donc ce
n'est pas ça non plus.


Avatar
François-Xavier GENDRIN
Si : la version raccourcie de ce qu'il y a au-dessus :
StackTraceElement appelant=(new Exception()).getStackTrace()[1].

Il n'est pas necessaire de lever l'exception puisque tu lances un objet et
que tu recuperes le meme...


ça à l'air d'être ça ! (si quelqu'un trouve mieux envoyé quand même)
(j'utiliserai un Throwable)

Merci à tous pour votre aide