是否可以将输出模板中的Timestamp作为DateTimeKind.Utc?

Ser*_*i Z 11 .net serilog

目前,当我{Timestamp}在outputTemplate中使用时,它似乎是由生成的DateTime.Now,因此具有DateTimeKind.Local风味,因为当我给它一个"o"说明符时,它产生类似于2016-02-12T09:51:34.4477761-08:00

对于上面的例子2016-02-12T17:51:34.4477761Z,我想要得到的是,本来可以生成TimestampDateTimeKind.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},您可以在输出模板中使用以获得所需的值.