2016-06-03 5 views
1

Ich habe ein Format, das ich für die Protokollierung folgen muss. Ich schreibe mit einem Serilog - Benutzerdefinierte Informationen vor JSON Zeichenfolge für FileSink

 Serilog.Log.Logger = new LoggerConfiguration() 
      .WriteTo.Sink(new FileSink(ConfigurationManager.AppSettings["serilogPath"],new JsonFormatter(), null)) 
      .CreateLogger(); 

zum FileSink out Dies erzeugt eine pro-line JSON-Objekt aussehen wie (ich formatiert es, es ist eigentlich eine Zeile in der Log-Datei):

{ 
    "Timestamp": "2016-05-29T02:49:33.2153863+08:00", 
    "Level": "Error", 
    "MessageTemplate": "my template", 
    "Properties": { 
     <MyPropertiesHere> 
    } 
} 

I habe von einer anderen Frage gefragt, dass ich meinen eigenen json formater spezifizieren muss, um den timestamp/level/messagetemplate zu entfernen, was ich tun kann, aber letztendlich, was ich brauche, ist etwas wie eine Kombination der Ausgabe einer Datei und eines FileSink mit JSON (Ich formatierte dies auch. Es sollte alles in einer Zeile sein):

2016-06-03 11:19:33.343 +08:00 [Information] { 
    "MyCustomKeyName": { 
     "key1": "val1", 
     "key2": "val2" 
    } 
} 

Mit meiner aktuellen Konfiguration zeigt das JSON-Objekt die korrekte serialisierte Form des Objekts, aber ich brauche den Zeitstempel, [Information] -Feld (könnte auch Fehler/Warnung sein) und die Fähigkeit, die "Eigenschaften "Schlüssel zu" MyCustomKeyName "".

Der Zeitstempel und die Information [Information] ist, was ich standardmäßig bei der Verwendung einer WriteTo.File erhalten, aber mein Ziel ist, das von der Verwendung eines FileSink mit Json Formatierer zu erhalten. Mit dem FileSink bekomme ich ein ganzes JSON-Objekt mit den darin eingekapselten Feldern als Schlüssel/Wert-Paare. Ich möchte die Zeitstempel- und Ebeneninformationen vor dem JSON-Objekt haben. Das Ziel ist Logstash es zu analysieren.

Vielen Dank.

Antwort

1

Implementieren Sie Ihre eigenen Serilog.Formatting.ITextFormatter ist der Weg, hier zu gehen; Es sollte ziemlich einfach sein, den Serilog JsonFormatter entweder direkt oder durch Kopieren des Codes für den JSON-Teil wiederzuverwenden.

Wenn Sie den Formatierer implementiert haben, können Sie ihn anstelle des integrierten JsonFormatter durch WriteTo.File() übergeben.

+0

Ich bin ein Total-Peeling, wenn es um C# geht. Ich erkannte gerade von deinem Kommentar ich könnte deinen JsonFormatter kopieren und einfügen und diese Einträge entfernen, und den Text hinter dem zu schreibenden JSON-String hinzufügen! Vielen Dank, ich mag es wirklich, wie Sie das Paket so gut unterstützen! – Bran

+0

Großartig, froh zu hören :-) –