2008-09-19 12 views
2

Lors de la connexion avec Log4Net, il est très facile de placer une classe qui a appelé le journal dans le fichier journal. J'ai trouvé dans le passé que cela rend très facile de suivre le code et de voir le flux à travers les classes. En Log4Net J'utilise le% propriété de l'enregistreur dans le modèle de conversion comme ceci:Logging Application Block - Enregistrement de l'appelant

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 

Et cela me donne la sortie que je veux:

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

Vous pouvez voir à la sortie que la classe a appelé le journal est Log4NetTechDemo.Tester, donc je peux tracer l'erreur à cette classe assez facilement.

Dans le bloc Logging Applicaton, je n'arrive pas à comprendre comment procéder avec un simple appel de journal. Est-ce que quelqu'un sait comment cela peut être fait? Si oui, un exemple ou des étapes pour le faire seraient très utiles.

Répondre

5

Ajoutez la méthode d'appel au dictionnaire ExtendedProperties de LogEntry; En supposant que vous n'avez pas supprimé les jetons ExtendedProperties du modèle de formatage, bien sûr.

Mettre quelque chose comme ça dans un emballage de l'exploitation forestière:

public void LogSomething(string msg) 
{ 
    LogEntry le = new LogEntry { Message = msg }; 
    le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType); 
    Logger.Write(le); 
} 

L'appel de cette produit quelque chose comme ceci à la fin du journal:

Extended Properties: Called from - LAB_Demo.Tester 
1

Nous n'avons pas trouvé un moyen facile sans toucher le StackTrace. S'il s'agit d'une exception, nous prenons simplement à partir de cela:

StackTrace trace = new StackTrace(ex, true); 
StackFrame frame = trace.GetFrame(0); 

Pour les articles bavards, nous écrivons simplement la chaîne. Nous avons un extrait qui peut saisir le nom de la classe lors de l'insertion. Nous déclarons également la chaîne const avec le nom de la classe.

Pas joli, mais c'est le meilleur que nous avons trouvé. J'espère que quelqu'un d'autre a une réponse bettwe dans ce fil :)