目前,当我在outputTemplate中使用{Timestamp}
时,它似乎是由DateTime.Now
生成的,因此具有DateTimeKind.Local
味道,因为当我给它一个" o&# 34;说明符,它产生类似于2016-02-12T09:51:34.4477761-08:00
我想要获得的上述示例是2016-02-12T17:51:34.4477761Z
,如果Timestamp
为DateTimeKind.Utc
,则会产生。
更新
看起来它实际上是DateTimeOffset that gets instantiated there所以没有DateTimeKind
生效,而看起来基础DateTime
始终是DateTimeKind.Unspecified
。 MSDN注意到格式化DateTimeOffset
与DateTime
时的行为存在一些差异,具体为:
" U" - 将DateTimeOffset值转换为UTC并使用格式yyyy-MM-dd HH:mm:ssZ输出。
转换正是我想要的,但我也需要分数。
答案 0 :(得分:9)
DateTimeOffset
格式化的限制似乎会阻碍这一点。
替代方案(只要附加属性不会在其他地方膨胀输出)是向管道添加Serilog ILogEventEnricher
:
class UtcTimestampEnricher : ILogEventEnricher {
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory lepf) {
logEvent.AddPropertyIfAbsent(
lepf.CreateProperty("UtcTimestamp", logEvent.Timestamp.UtcDateTime));
}
}
然后,您可以在输出模板中使用{UtcTimestamp:o}
来获取所需的值。