目前,当我{Timestamp}在outputTemplate中使用时,它似乎是由生成的DateTime.Now,因此具有DateTimeKind.Local风味,因为当我给它一个"o"说明符时,它产生类似于2016-02-12T09:51:34.4477761-08:00
对于上面的例子2016-02-12T17:51:34.4477761Z,我想要得到的是,本来可以生成Timestamp的DateTimeKind.Utc.
更新
它看起来实际上是DateTimeOffset在那里实例化,所以没有DateTimeKind生效,而是看起来底层DateTime总是如此DateTimeKind.Unspecified.MSDN注意到格式化DateTimeOffsetvs 时的行为有一些差异DateTime,具体来说:
"u" - 将DateTimeOffset值转换为UTC并使用格式yyyy-MM-dd HH:mm:ssZ输出.
转换正是我想要的,但我也需要分数.
Nic*_*rdt 10
似乎DateTimeOffset格式化的限制将阻止这一点.
另一种方法(只要附加属性不会在其他地方膨胀输出)是向ILogEventEnricher管道添加一个Serilog :
class UtcTimestampEnricher : ILogEventEnricher {
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory lepf) {
logEvent.AddPropertyIfAbsent(
lepf.CreateProperty("UtcTimestamp", logEvent.Timestamp.UtcDateTime));
}
}
Run Code Online (Sandbox Code Playgroud)
然后{UtcTimestamp:o},您可以在输出模板中使用以获得所需的值.