Serilog Timestamp @t 不是 UTC 时间

Serilog Timestamp @t is not in UTC time

我正在用 C# 编码,我有一个用 Serilog 生成的日志文件,写入文件并使用 CompactJsonFormatter 在 Json 中格式化。 问题是时间没有设置为正确的时区,它是 UTC+0。 有没有一种方法可以为时间戳设置正确的时区? P.S。 TimeWrap 已弃用

日志文件中生成的示例行:

{"@t":"2020-02-19T13:34:55.6398202Z","@mt":"Stringa random {stringToLog}","stringToLog":"this"}

这是我用来生成日志的方法:

目前无法使用现有 CompactJsonFormatter 更改时间戳转换为字符串的方式... hard-coded 始终获取 UtcDateTime 然后转换它到字符串。

如果你想改变这个,你必须通过创建你自己的 class 实现你自己的 CompactJsonFormatter 版本来实现 ITextFormatter 并告诉 Serilog 使用它相反。

您可以将 CompactJsonFormatter 的代码复制到您的代码库中并根据您的需要进行修改。

那么您只需切换到您的自定义格式器,而不是使用默认格式器:

var logger = new LoggerConfiguration()
    .WriteTo.File(new YourCompactJsonFormatter(), "App.log")
    .CreateLogger();

Serilog.Formatting.Compact 项目非常“固执己见”,无法真正配置。

https://github.com/serilog/serilog-formatting-compact/blob/dev/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs

如果您想修改格式化程序的工作方式,只需将此文件复制到您的项目中并根据需要进行修改。

对于时区,您可以修改此文件中的以下行

output.Write(logEvent.Timestamp.UtcDateTime.ToString("O"));

output.Write(logEvent.Timestamp.LocalDateTime.ToString("O"));

然后您只需切换到您的自定义格式器,而不是使用默认格式器

var logger = new LoggerConfiguration()
    .WriteTo.File(new YourCompactJsonFormatter(), "App.log")
    .CreateLogger();