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 ?

Comment convertir une interface{} qui est vraiment une tranche de types dont le genre est reflect.Int32 en tranche de int32 ?

Créer un fichier CSV à partir d'un fichier texte avec des jetons d'en-tête à l'aide de scripts shell