Ist es möglich, Timestamp in der Ausgabeschablone als DateTimeKind.Utc zu erhalten?

8

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.

    
Sergei Z 12.02.2016, 18:14
quelle

1 Antwort

7

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:

%Vor%

Sie können dann {UtcTimestamp:o} in Ihrer Ausgabevorlage verwenden, um den benötigten Wert zu erhalten.

    
Nicholas Blumhardt 16.02.2016, 06:20
quelle

Tags und Links