2009-05-29 4 views
3

J'ai hérité de l'application .Net (C#) qui n'a aucun traçage ou enregistrement ajouté. Cette application fait tout depuis la création, la lecture, la mise à jour et la suppression d'enregistrements. Il envoie des e-mails et appelle des services Web.La meilleure façon d'ajouter la connexion dans l'application existante (windows ou web) .Net

Bien sûr, c'est un cauchemar de le maintenir, car il n'y a pas de mécanisme de journalisation et d'essai (je sais que je ne pouvais pas le croire non plus). Alors, quelle serait la meilleure façon d'implémenter la journalisation dans ce système? Je ne peux pas aller à chaque appel de fonction et ajouter des lignes de journalisation. Est-il possible d'avoir une journalisation dynamique qui peut se connecter en fonction des noms de méthodes que je fournis.

I.E. Lorsque UpdateOrder() est appelée, mon enregistreur doit enregistrer (méthode de commande mise à jour a été appelé)

Merci

+3

Pouvez-vous donner plus d'informations sur la langue et la plateforme? –

+0

désolé ... ils sont construits .Net 3.5, C#, ASP.Net – Zeus

Répondre

1

Vous pouvez utiliser un cadre d'AOP comme Postsharp pour créer un attribut spécifique pour enregistrer les appels de méthode:

public class TraceAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Entering {0}.", eventArgs.Method); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Leaving {0}.", eventArgs.Method); } 
} 

(ce code est t il par exemple à partir de la page d'accueil)

Vous pouvez ensuite appliquer cet attribut aux méthodes que vous souhaitez vous connecter:

[Trace] 
public void UpdateOrder() 
{ 
    ... 
} 
+0

PostSharp est une très bonne solution pour ce problème. L'attribut a cependant l'inconvénient de devoir modifier le code. Une meilleure façon (moins intrusive) de le faire serait d'utiliser MultiCastAttribute dans PostSharp, où vous devez seulement spécifier un attribut où vous indiquez quels types (ou méthodes) sont affectés: [assembly: MyOnMethodInvocationAspect ( AttributeTargetAssemblies = " mscorlib ", AttributeTargetTypes =" System.Threading. * ")] fera intercepter postsharp chaque appel à n'importe quelle classe dans System.Threading. * (voir plus dans http://doc.postsharp.org/) –

2

Utilisez log4net, il est la version .NET du log4j Apache. La bibliothèque est bien testée, utilisée par les programmeurs partout, et est très personnalisable. Puisque vous avez hérité de ce code, ce ne serait pas une mauvaise chose de le parcourir et de commencer à ajouter un support de journalisation. Les paramètres de personnalisation sont gérés via un fichier global dans le projet avec possibilité de spécifier où les informations de journalisation vont (Emailed, fichiers texte, console) et quel niveau de verbosité est nécessaire par source de sortie des informations de journalisation.

Questions connexes