Bonjour,
J'ai un problème avec un bout de code que j'ai résolu mais dont je n'arrive pas à trouver d'explications.
Peut être que vous pourrez m'aider.
J'ai un service Windows qui instancie une class gérant mes logs.
Dans ce service j'instancie un host WCF.
Je met mon instance de ma class de log dans une class statique qui va permettre la propagation de mon instance de log à mon service WCF.
Dans mon constructeur de mon service WCF j'utilise mon logger. Tout ce passe bien j'ai bien mes logs.
Dans une méthode exposée du service je fais un appel et là rien ne s’affiche, mon client bug et je soupçonne d'avoir une exception.
Ma méthode de log la voici :
Et voici la methode GetCallingClass:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void Info(string message) { var className = GetCallingClass(); var methodName = GetCallingMethod(); Logger.InfoFormat("[{0}] [{1}] - {2}", className, methodName, message); }
et Get callingMethod :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 return new StackTrace().GetFrame(2).GetMethod().Name; }
Donc avec ce code plus haut ca ne marche pas. Par contre si je fais un try catch dans mes méthodes là ca marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private static string GetCallingMethod() { return new StackTrace().GetFrame(2).GetMethod().Name; }
J'ai bien mon log avec les bons noms de class et méthode. Je ne rentre donc pas dans le catch.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 private static string GetCallingMethod() { try { return new StackTrace().GetFrame(2).GetMethod().Name; } catch { return "Unknown Method"; } } private static string GetCallingClass() { try { return new StackTrace().GetFrame(2).GetMethod().ReflectedType.Name; } catch { return "Unknown Class"; } }
La question est : Pourquoi ca marche ?
Si vous avez une idée n'hésitez pas !
Partager