2010-09-08 3 views

Antwort

1

Keine Antwort, aber ich fragte früher eine question über Protokollierung und WCF und eines der Dinge, die ich wissen wollte, war über Service Trace Viewer. Alle Beispiele, die ich gesehen habe, beschreiben die XML-Dateien, die vom Service Trace Viewer über System.Diagnostics TraceSources und den System.Diagnostics XmlFileListener generiert werden. Wie auch immer, wenn ich irgendwelche Antworten in meinem post bekomme, könntest du sie nützlich finden.

+0

Ich denke, Sie meinen System.Diagnostics.XmlWriterTraceListener. – bitbonk

+1

Sie haben Recht. Ich tippte das ein, ohne den genauen Listener-Namen zu überprüfen. Wie auch immer, ich bin immer noch daran interessiert, wie man (wenn es möglich ist) von log4net, NLog usw., das mit SvcTraceViewer.exe kompatibel ist. – wageoghe

2

Wenn ich das wollte, dann würde ich mein benutzerdefiniertes Layout schreiben. Ich habe (noch) nicht auf die Details geachtet, aber ich würde eine Klasse schreiben, die sich von XmlLayoutBase ableitet. Ich brauche noch etwas Zeit, um die Details zu betrachten ...

Sie könnten auch Ihren eigenen Appender schreiben, aber ich denke in diesem Fall macht es mehr Sinn, eine Layoutklasse zu schreiben.

Bearbeiten: Vielleicht ist das Schreiben Ihrer eigenen Appender eine gute Idee. In diesem Fall könnten Sie die Klasse System.ServiceModel.Diagnostics.DiagnosticTrace verwenden. Noch nicht sicher, ob das der richtige Weg ist. Momentan habe ich nicht viel Zeit, aber ich werde mir das genauer ansehen. Hier

+0

Ich denke, dass es eine beträchtliche Zeit dauern wird, das Format mit allen Optionen des XmlWriterTraceListener vollständig nachzuahmen. – bitbonk

+0

Darum fürchte ich auch meinen neuen Vorschlag. –

+0

Welche System.ServiceModel.Diagnostics.DiagnosticTrace-Klasse meinen Sie? In der GAC finde ich nur einen, der Assembly intern ist und nicht verwendet werden kann. – bitbonk

0

ist eine Idee:

Sie könnten eine benutzerdefinierte log4net Appender schreiben und sie Nachrichten schreiben (indirekt) an die XmlWriterTraceListener. Innerhalb der Append-Methode senden Sie einfach die Nachricht an System.Diagnostics.

Hier ist eine example eines benutzerdefinierten Appender.

In diesem Beispiel wird Append außer Kraft gesetzt. Es wird eine LoggingEvent-Klasse/-Struktur übergeben. Für Ihre Zwecke (um die log4net-Ausgabe in ein Ausgabeformat geroutet zu bekommen, das von SvcTraceViewer gelesen werden kann), könnten Sie Ihre Ausgabe in System.Diagnostics schreiben (nachdem sie es zum ersten Mal für den XmlWriterTraceListener konfiguriert hat). Sie könnten entweder mit Trace.Write * Methoden, Trace.Trace * Methoden oder mit TraceSources schreiben.

Für TraceSources könnten Sie den TraceSource-Namen als den Loggernamen ansehen (der in der LoggingEvent-Klasse/-Struktur verfügbar ist). Sie können also eine TraceSource in Ihrer app.config-Datei für jeden log4net-Loggernamen konfigurieren, den Sie in die XML-Datei aufnehmen möchten. Ihre Append-Logik sieht dann etwa so aus:

protected override void Append(LoggingEvent le) 
{ 
    TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent 
    ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage); 
} 

Dies könnte Ihnen geben, was Sie wollen. Beachten Sie, dass ich das nicht wirklich getan habe, also kann ich nicht sagen, ob es eine gute Idee ist oder nicht, aber es scheint, als würde es funktionieren.

Entschuldigen Sie, dass Sie kurz sind, aber ich versuche das zu beenden, bevor ich gehen muss.

+0

Einen eigenen Appender zu schreiben (nur zum Zweck der Formatierung) hat einen Nachteil: Ich kann nicht alle anderen Appender (RollingFileAppender, FileAppender, ...) verwenden oder ich müsste alle davon ableiten. – bitbonk

+0

FWIW, können Sie den Code für den XmlWriterTraceListener hier finden: http://www.koders.com/csharp/fid7ECC273D0A665AFFDB9276AC64289085CD1E2A8E.aspx?s=DateTime Ich bin nicht sicher, wie aktuell es ist (dh. NET 1.1, 2.0, 3.0 usw.), aber es scheint zu zeigen, wie man das XML in einem Format auslegt, das von SvcTraceViewer konsumiert werden kann. Vielleicht könnte dies verwendet werden, um ein XmlLayout zu entwickeln. Ich bin mit dem Schreiben von log4net-Layouts nicht wirklich vertraut, daher kann ich nicht sagen, ob das eine gute Idee ist oder nicht. – wageoghe

+0

Ein benutzerdefinierter Appender ist IMHO nicht möglich, weil ich nicht in anderen Appendern schreiben kann, die dasselbe Format verwenden. Ich möchte mit dem Format in den RollingFileAppender schreiben. – bitbonk

Verwandte Themen