我正在用C#编写代码,我有一个用Serilog生成的日志文件,写到一个文件中,用CompactJsonFormatter用Json格式格式化。问题是时间没有设置到正确的时区,而是在UTC+0中。是否有方法为时间戳设置正确的时区?反对P.S. TimeWrap
在日志文件中生成的示例行:
{"@t":"2020-02-19T13:34:55.6398202Z","@mt":"Stringa random {stringToLog}","stringToLog":"this"}这是我用来生成日志的方法:

发布于 2020-02-19 16:02:17
目前不可能使用现有的CompactJsonFormatter更改时间戳转换为字符串的方式.硬编码总是获取UtcDateTime,然后将其转换为string。
如果您想改变这一点,您必须通过创建自己的实现CompactJsonFormatter的类来实现自己版本的ITextFormatter,并告诉Serilog使用它。
您可以将CompactJsonFormatter的代码复制到代码库中,并根据您的需要对其进行修改。
然后,只需切换到自定义格式化程序,而不是使用默认格式化程序:
var logger = new LoggerConfiguration()
.WriteTo.File(new YourCompactJsonFormatter(), "App.log")
.CreateLogger();发布于 2021-01-02 17:44:25
Serilog.Formatting.Compact项目非常“固执己见”,不能真正配置。
如果要修改格式化程序的工作方式,只需将此文件复制到项目中并根据需要进行修改即可。
对于UTC,您可以在此文件中修改以下行
output.Write(logEvent.Timestamp.LocalDateTime.ToString("O"));至
output.Write(logEvent.Timestamp.UtcDateTime.ToString("O"));然后,您只需切换到自定义格式化程序,而不是使用默认的格式化程序。
var logger = new LoggerConfiguration()
.WriteTo.File(new YourCompactJsonFormatter(), "App.log")
.CreateLogger();https://stackoverflow.com/questions/60303283
复制相似问题