2016-02-12 78 views
8

目前,當我在一個outputTemplate使用{Timestamp}它似乎已被DateTime.Now產生的,因此,因爲是的DateTimeKind.Local味道時,我給它一個「O」符它類似的輸出產生到2016-02-12T09:51:34.4477761-08:00是否有可能將DateTimeKind.Utc中的Timestamp作爲輸出模板?

我想什麼取而代之的是上面的例子是2016-02-12T17:51:34.4477761Z,如果TimestampDateTimeKind.Utc就可以生產了。

更新

它看起來像它實際上是DateTimeOffset that gets instantiated there所以沒有DateTimeKind是有效的,而它看起來像潛在DateTime始終是DateTimeKind.UnspecifiedMSDN注意到,存在一些行爲差異格式化時DateTimeOffset VS DateTime,具體有: - :MM:

「U」 的的DateTimeOffset值UTC並將其輸出使用格式YYYY-MM-DD HH轉換SSZ 。

轉換正是我想要的,但我也需要分數。

回答

7

它似乎限制在DateTimeOffset格式會阻止這一點。

替代(只要附加屬性不臃腫輸出別的地方)是一個Serilog ILogEventEnricher添加到管道:

class UtcTimestampEnricher : ILogEventEnricher { 
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory lepf) { 
    logEvent.AddPropertyIfAbsent(
     lepf.CreateProperty("UtcTimestamp", logEvent.Timestamp.UtcDateTime)); 
    } 
} 

然後可以使用{UtcTimestamp:o}在你的輸出模板,以獲得你需要的價值。

相關問題