Frage

Wenn eine Anwendung zu schreiben ist sämtliche Tätigkeiten Daten in eine log-Datei, gibt es eine Nutzung von mehr als einem TraceSource?Ich bin einfach neugierig, verwendet Fällen, in denen braucht man mehr als eine TraceSource in den code.

War es hilfreich?

Lösung

Siehe die Antworten zu den anderen Fragen, die für einen guten Ausgangspunkt zur Verwendung TraceSources:

nicht verstehen können .net 2010-tracing-app.config

Wie zu verwenden TraceSource über Klassen

Ich würde sagen, dass jedes mal, wenn Sie mehr als eine Klasse könnte man (vielleicht) in Betracht, bei dem mehr als eine TraceSource.

Ein Vorteil, der mehr als eine TraceSource ist, dass es erhöht die Granularität, mit der Sie Steuern können Ihre Anmeldung.Zum Beispiel, wenn Sie einen anderen TraceSource in jeder Klasse, dann könnten Sie die Kontrolle der Protokollierung bis auf die Klassen-Ebene.Sie könnten sich auf eine (oder mehrere) bestimmte Klassen und schalten Sie alle anderen.

Dies ist ein gemeinsames Muster für die Benutzer von NLog und log4net.Typische Initialisierung von Klassen, die mit diesen logging-Plattformen wird in etwa so Aussehen:

public class A
{
  //NLog example
  private static Logger logger = LogManager.GetCurrentClassLogger();

  public F()
  {
    logger.Info("Inside F");
  }
}

In diesem Beispiel ist der logger für die Klasse A ist benannt nach dem voll qualifizierten Namen der Klasse (NLog übernimmt die harte Arbeit in GetCurrentClassLogger()).

, Etwas ähnliches zu tun mit TraceSource, Sie würden so etwas tun:

public class A
{
  private static TraceSource ts = new TraceSource(System.Reflection.GetCurrentMethod().DeclaringType.ToString();

  public F()
  {
    ts.Information("Inside F");
  }
}

Wenn Sie dies nicht in jeder Klasse konnten Sie leicht Steuern Sie die Protokollierung von Klasse.

Ich bin mir nicht so sicher, dass dieses Muster ist wie üblich mit TraceSource, wie es ist, mit log4net und NLog.Ich denke, dass Sie möglicherweise öfter sehen Benutzer von TraceSource get Ihre TraceSources von funktionellen Bereich.

So, vielleicht teilen Sie Ihre app bis zu "Lesen", "Prozess" und "Write" - Funktion (oder was auch immer für Sie Sinn macht).In diesem Fall kann man die entsprechenden TraceSource in Ihre Klassen basierend auf den funktionalen Bereich, in dem Sie verwendet werden:

public class FileReader
{
  private static TraceSource ts = new TraceSource("Read");

  public F()
  {
    ts.Information("Hello from FileReader.F");
  }
}

public class NetworkReader
{
  private static TraceSource ts = new TraceSource("Read");

  public F()
  {
    ts.Information("Hello from NetworkReader.F");
  }
}

Und so weiter.

Nun, Sie könnten sich anmelden für "Lesen", und für alle anderen Funktionsbereiche (oder aktivieren Sie die ausführliche Protokollierung für "Lesen" und weniger die ausführliche Protokollierung für alle anderen).

Darüber hinaus wird eine der Optionen mit TraceListeners ist die Ausgabe der TraceSource Namen.Also, in der Ausgabe wird es einfacher zu machen, Einblick in Ihre Protokollierung, weil Sie könnten, wenn Sie dies tun, relativ leicht zu finden, alle log-Nachrichten, die generiert werden, von einem bestimmten Funktionsbereich (oder von einem bestimmten TraceSource).

Wenn Sie eine gute namespace, naming convention, könnten Sie sogar erwägen, die TraceSource für jede Klasse basiert auf einigen Knoten in der namespace-Hierarchie oder sogar auf der Basis von Montage, dass die Klasse lebt.Es gibt .NET-Anrufe für ein Typ, abrufen der Informationen für Sie.

Da sind Sie auf der Suche TraceSources, möchte ich Sie ermutigen, sich dieses Projekt auf codeplex:

http://ukadcdiagnostics.codeplex.com/

Es ist ein schönes Projekt (basierend auf TraceSource), dass ermöglicht Sie zu format Ihre logging-Ausgabe, die in einer ähnlichen Weise zu dem, was Sie tun können, mit log4net und NLog.

Ich würde Sie auch ermutigen, Sie zu nehmen einen Blick auf diese Protokollierung wrapper gebaut, um die TraceSource aus Burg.

https://github.com/castleproject/Castle.Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs

Die interessante Sache, die Sie getan haben, um eine Hierarchie zu TraceSource Namen.Ich implementiert haben etwas ähnliches in der Vergangenheit.Es funktioniert ziemlich gut.

Meine Antwort in dieser Frage liefert eine Idee, wie ein TraceSource Hierarchie von Vorteil sein kann:

Was ist der beste Ansatz, um die Protokollierung?

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top