Protokollierung ein-und Ausfahrt von Methoden zusammen mit den Parametern automatisch?
Ist es für mich ein Weg, um fügen Sie die Protokollierung, so dass das betreten und verlassen von Methoden wird protokolliert zusammen mit den Parametern automatisch irgendwie für tracing-Zwecke? Wie würde ich tun?
Ich bin mit Log4Net.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der beste Weg, um erreichen diese Art der Sache wird durch die Verwendung abfangen, Es gibt ein paar Möglichkeiten, dies zu tun, aber Sie alle neigen dazu, etwas invasiv. Da wäre zum einen leiten Sie alle Ihre Objekte aus ContextBoundObject. Hier ist ein Beispiel für die Verwendung dieses Ansatzes. Der andere Ansatz wäre die Verwendung einer der bestehenden AOP-Bibliotheken zu erreichen. So etwas wie DynamicProxy aus der Schloss-Projekt ist der Kern vieler dieser. Hier sind ein paar links:
Spring.Net
PostSharp
Cecil
Gibt es wahrscheinlich mehrere andere, und ich weiß,Schloss Windsor, und Ninject sowohl die AOP-Funktionen auf der Oberseite des IoC-Funktionalität.
Einmal AOP ist in Ort, den Sie würde einfach schreiben Sie eine interceptor-Klasse, würde schreiben, die Informationen über die Methode ruft log4net.
Ich eigentlich nicht überraschen würde, wenn einer der AOP-frameworks würde Ihnen die Art von Funktionalität aus der box.
Ich bin mir nicht sicher, was Ihre tatsächlichen Bedürfnisse sind, aber hier ist ein low-rent-option. Es ist nicht gerade das "automatische", aber man könnte StackTrace zu schälen die Informationen, die Sie suchen, in einer Weise, die nicht verlangen, Argumente übergeben - ähnlich wie ckramer ' s Vorschlag bezüglich abfangen:
Könnte man kombinieren, so etwas wie das obige Beispiel mit der Vererbung, mit einem nicht-virtuellen öffentliche Element im Basis-Typ, zu bedeuten, dass die action-Methode, dann Aufruf einer virtuellen Mitglied, um die eigentliche Arbeit:
Wieder - es gibt nicht viel "automatisch" über dieses, aber es würde die Arbeit auf einer begrenzten basis, wenn Sie nicht verlangen, instrumentation, die auf jeden einzelnen Methodenaufrufs.
Hoffe, das hilft.
Haben Sie einen Blick auf:
Wie kann ich abfangen des Aufrufs einer Methode in C#?
PostSharp - il Weberei - Gedanken
Suche auch SO für 'AOP' oder 'Aspect-Oriented Programming' und PostSharp...Sie erhalten einige interessante Ergebnisse.
Könnten Sie einen post-compiler wie Postsharp. Das Beispiel von der website spricht über die Einrichtung eines tracer für das betreten und verlassen einer Methode, die sehr ähnlich zu dem, was Sie wollen.
Den Dekorator-Muster kann helfen.
Können Sie open-source-framework CInject auf CodePlex hat eine LogInjector zu markieren Sie den Eintrag und beenden des Aufrufs einer Methode.
Oder können Sie die genannten Schritte auf diesem Artikel auf Das abfangen der Methodenaufrufe mit IL und erstellen Sie Ihre eigenen Abfangjäger mit der Spiegelung.Strahlen-Klassen in C#.
Funktionen
Erweitern auf Jareds Antwort, die Vermeidung von code-Wiederholung und darunter Optionen für Argumente:
Nutzung
Ausgang
In der Konsole, das wäre der Ausgang, wenn
DoSomething
ausgeführt wurden, mit "bla" alsarg1