Momentan, wenn ich {Timestamp}
in einem outputTemplate verwende, scheint es, dass es von DateTime.Now
erzeugt wurde und daher von DateTimeKind.Local
flavour ist, da, wenn ich ihm einen "o" -Spezifikator gebe, eine Ausgabe ähnlich 2016-02-12T09:51:34.4477761-08:00
erzeugt
Was ich stattdessen für das obige Beispiel erhalten möchte, ist 2016-02-12T17:51:34.4477761Z
, das erzeugt worden wäre, wenn die Timestamp
von DateTimeKind.Utc
gewesen wäre.
Aktualisieren
Es sieht so aus, als ob es tatsächlich DateTimeOffset ist, das dort instanziiert wird also ist kein DateTimeKind
in Kraft, sondern es sieht so aus als ob der zugrunde liegende DateTime
immer von DateTimeKind.Unspecified
ist. MSDN stellt fest, dass beim Formatieren von% co_de ein Unterschied im Verhalten besteht % vs DateTimeOffset
, speziell:
"u" - Konvertiert den DateTimeOffset-Wert in UTC und gibt ihn im Format JJJJ-MM-TT HH: mm: ssZ aus.
Die Konvertierung ist genau das, was ich will, aber ich brauche auch Bruchteile.
Es scheint, dass die Begrenzung in DateTimeOffset
Formatierung dies vereiteln wird.
Eine Alternative (solange die zusätzliche Eigenschaft die Ausgabe an keiner anderen Stelle aufbläht) besteht darin, der Pipeline ein Serilog ILogEventEnricher
hinzuzufügen:
Sie können dann {UtcTimestamp:o}
in Ihrer Ausgabevorlage verwenden, um den benötigten Wert zu erhalten.