Est-il possible d'obtenir Timestamp dans le modèle de sortie en tant que DateTimeKind.Utc ?

Actuellement, lorsque j'utilise {Timestamp}dans un outputTemplate, il semble avoir été généré par DateTime.Nowet donc être de DateTimeKind.Localsaveur puisque, lorsque je lui donne un spécificateur "o", il produit une sortie similaire à2016-02-12T09:51:34.4477761-08:00

Ce que j'aimerais obtenir à la place pour l'exemple ci-dessus est 2016-02-12T17:51:34.4477761Z, qui aurait été produit s'il avait Timestampété de DateTimeKind.Utc.

Mise à jour

Il semble que ce soit en fait DateTimeOffset qui y soit instancié, donc no DateTimeKindest en vigueur, il semble plutôt que le sous-jacent DateTimesoit toujours de DateTimeKind.Unspecified. MSDN note qu'il existe une différence de comportement lors du formatage par DateTimeOffsetrapport DateTimeà, en particulier :

"u" -- Convertit la valeur DateTimeOffset en UTC et l'affiche au format aaaa-MM-jj HH:mm:ssZ.

La conversion est exactement ce que je veux mais j'ai aussi besoin de fractions.


Solution du problème

Il semble que la limitation du DateTimeOffsetformatage va contrecarrer cela.

Une alternative (tant que la propriété supplémentaire ne gonfle pas la sortie ailleurs) consiste à ajouter un Serilog ILogEventEnricherau pipeline :

class UtcTimestampEnricher: ILogEventEnricher {
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory lepf) {
logEvent.AddPropertyIfAbsent(
lepf.CreateProperty("UtcTimestamp", logEvent.Timestamp.UtcDateTime));
}
}

Vous pouvez ensuite l'utiliser {UtcTimestamp:o}dans votre modèle de sortie pour obtenir la valeur dont vous avez besoin.

Commentaires

Posts les plus consultés de ce blog

Comment signer la connexion OKEx API version 5 avec websockets ?

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"