2010-01-29 13 views
5

Einfache Frage: siehe Titel. Ich benutze .NET 3.5.Gibt es in .NET ein integriertes Protokollierungsframework?

Ausarbeitung: Ich baue ein Plugin, das zur Laufzeit in eine 3rd-Party-Anwendung geladen wird. Die Hauptanwendung verwendet log4net als Protokollierungs-Framework. Es stellt jedoch den Stammprotokollierer nicht bereit, sodass wir nicht protokollieren können. (Ich habe dieses Problem mit den Upstream-Entwicklern angesprochen und sie werden es für ein zukünftiges Release reparieren. In der Zwischenzeit muss ich mir etwas anderes einfallen lassen)

Eine weitere Einschränkung des Systems ist, dass es Benachrichtigungen erhält Damit es ein Plugin lädt, das nicht auf dem lokalen System existiert, wird es das Plugin von einem Server herunterziehen, mit dem es verbunden ist (wenn es auf dem Server existiert), aber es kann nur die Assembly herunterziehen, wo das Plugin lebt . Dies bedeutet, dass keine externen Assemblys und keine .config oder andere Dateien mit dem Plugin bereitgestellt werden können.

Das lässt mich nur mit integrierten .NET-Assemblys und alles in meiner Plugins 'Assembly. Ich möchte jedoch nicht das Rad neu erfinden, indem ich mich selbst ein weiteres Logging-Framework erschaffe, also würde ich gerne wissen, wie der beste Ansatz für dieses Problem wäre.

Ich würde es vorziehen, auf eine Datei zu protokollieren und möchte vermeiden, Dinge in das Windows-Ereignisprotokoll zu dumpen.

+0

"es stellt den Root-Logger nicht aus" - können Sie nicht einfach einen Verweis auf log4net.dll hinzufügen und direkt auf den Root-Logger zugreifen? – Joe

+1

Ich habe versucht, meinen eigenen Root-Logger zu erstellen und zu versuchen, die übergeordneten Anwendungen zu verwenden, ohne Erfolg. Log4net erlaubt nur einen Root-Logger pro Anwendung und die übergeordnete Anwendung erstellt bereits einen. Wenn sie irgendwo ausgestellt wären, wäre ich in der Lage, es zu benutzen, aber das ist nicht der Fall. Ich bin mir nicht sicher, ob es eine Root-Logger pro App oder eine pro AppDomain ist.Wenn es eine pro AppDomain ist, könnte ich versuchen, meine eigene AppDomain von meinem Plugin zu erstellen und dann meinen eigenen Root-Logger zu erstellen. – alimbada

Antwort

10

zwei Optionen sind da draußen:

Die Trace und Debug Klassen, die Teil des .NET-Frameworks sind (im System.Diagnostics Namespace) sind wahrscheinlich die beste Wahl. Diese Tools stellen die Tools zur Verfügung, mit denen eine leichte Protokollierung für eine Vielzahl konfigurierbarer Listener durchgeführt werden kann, die in Dateien, Eventlogs und andere Orte schreiben können.

Es klingt, als ob Sie keine zusätzlichen Klassen zu Ihrer Anwendung hinzufügen können, aber wenn Sie können, dann würde ich die Microsoft Enterprise Library empfehlen, die als externes Protokollierungsframework von Microsoft bereitgestellt wird und dazu tendiert, gut zu spielen mit .NET-Code.

+0

Ich dachte ursprünglich auch an die Enterprise Library, aber nachdem ich meinen Verdacht bestätigt hatte, dass es sich um eine externe Bibliothek handelte, hörte ich auf diesen Gedankengang zu verfolgen. Ich werde Trace und Debug für jetzt versuchen. Prost. :) – alimbada

-1

+1 für Trace und Debug. Sie können die Upstream-Entwickler bitten, einen TraceListener zu implementieren, der Ihre Nachrichten an Log4Net weiterleitet, damit alles in einer einzigen Datei endet.

Sie könnten auch Gibraltar zum Anzeigen und Analysieren der log4net-Daten betrachten. In der Tat, wenn die Upstream-Entwickler Gibraltar integriert haben, würde es die log4net- und Trace-Daten automatisch zusammenführen.

UPDATE: Wir haben unseren Log Viewer KOSTENLOS gemacht!

Lesen Sie unseren Blog für mehr darüber, warum our best log viewer is now FREE

oder auf unserer Website zu learn more besuchen oder einfach nur get the bits now!

Verwandte Themen