2016-06-25 7 views
2

Was ist der Zweck von Serilog @ Syntax?Was ist Serilog Destrukturierung?

Wenn ich laufen die folgenden:

var dummy = new { Foo = "Bar", Date = DateTime.Now }; 

Log.Information("Dummy object: {Dummy}", dummy); 

Dann bekomme ich eine Ausgabe an die Konsole wie folgt:

Time: 16:20 [Level: Information] (ManagedThreadID: 8) Message: Dummy object: "Foo = Bar, Date = 25/06/2016 16:20:30 }" 

Wenn ich die {Dummy} zu {@Dummy} dann ändern bekomme ich die gleiche Ausgabe

Time: 16:22 [Level: Information] (ManagedThreadID: 8) Message: Dummy object: Foo: "Bar", Date: 06/25/2016 16:22:28 } 

Also, was ist die @ angenommen t o machen?

Antwort

5

Schauen Sie genau hin, und Sie werden sehen, dass es nicht die gleiche Ausgabe ist.

Der @ Operator vor Dummy sagt Serilog das Objekt übergeben zu serialisiert, anstatt zu konvertieren es ToString() verwenden, die ohne Verwendung der @ Operator ist, was auf dem ersten Beispiel passiert.


Ihre Log-Ereignis im ersten Beispiel wird mit einer Eigenschaft wie (hier in JSON) Ende:

{ 
    "Dummy": "{ Foo = Bar, Date = 25/06/2016 16:20:30 }" 
} 

Arbeiten mit {} @Dummy den Parameter verursachen als strukturierte Daten serialisiert werden:

{ 
    "Dummy": 
    { 
    "Foo": "Bar", 
    "Date": "25/06/2016 16:20:30" 
    } 
} 

Comment from Nicholas Blumhardt (Schöpfer von Serilog):

012.351.

Gegebenenfalls ist die Verwendung des @-Operators viel nützlicher für Manipulation/Analyse.

Der Grund für diese "Opt-in" -Anforderung ist, dass die meisten .NET-Programme schön in Strings konvertieren, aber nicht sauber/sinnvoll serialisierbar sind. Wenn Sie sich für die Serialisierung mit @ entscheiden, sagen Sie: "I wissen, was ich mache, serialisieren Sie dieses Objekt!" :)

+0

Ja! Wenn Sie einen anonymen Typ 'ToString()' 'erhalten, erhalten Sie ein serialisiertes Formular. – BanksySan

+0

@BanksySan Art von ... 'ToString()' an einem anonymen Typ gibt Ihnen immer noch eine einzige Zeichenfolge, es sieht einfach gut aus. Das '@' ist viel mehr als das, da es die Senke mit dem serialisierten Objekt versorgt, und die Senke kann damit machen, was sie will, einschließlich der Speicherung der serialisierten Daten. Versuchen Sie Serilog mit Seq (https://getseq.net) zu verwenden, um zu sehen, wie mächtig der '@' Operator sein kann. –

Verwandte Themen