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.Now
et donc être de DateTimeKind.Local
saveur 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 DateTimeKind
est en vigueur, il semble plutôt que le sous-jacent DateTime
soit toujours de DateTimeKind.Unspecified
. MSDN note qu'il existe une différence de comportement lors du formatage par DateTimeOffset
rapport 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 DateTimeOffset
formatage va contrecarrer cela.
Une alternative (tant que la propriété supplémentaire ne gonfle pas la sortie ailleurs) consiste à ajouter un Serilog ILogEventEnricher
au 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
Enregistrer un commentaire