首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog时间戳@t不在UTC时间

Serilog时间戳@t不在UTC时间
EN

Stack Overflow用户
提问于 2020-02-19 15:06:09
回答 2查看 4.6K关注 0票数 1

我正在用C#编写代码,我有一个用Serilog生成的日志文件,写到一个文件中,用CompactJsonFormatter用Json格式格式化。问题是时间没有设置到正确的时区,而是在UTC+0中。是否有方法为时间戳设置正确的时区?反对P.S. TimeWrap

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

代码语言:javascript
复制
{"@t":"2020-02-19T13:34:55.6398202Z","@mt":"Stringa random {stringToLog}","stringToLog":"this"}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-19 16:02:17

目前不可能使用现有的CompactJsonFormatter更改时间戳转换为字符串的方式.硬编码总是获取UtcDateTime,然后将其转换为string。

如果您想改变这一点,您必须通过创建自己的实现CompactJsonFormatter的类来实现自己版本的ITextFormatter,并告诉Serilog使用它。

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

然后,只需切换到自定义格式化程序,而不是使用默认格式化程序:

代码语言:javascript
复制
var logger = new LoggerConfiguration()
    .WriteTo.File(new YourCompactJsonFormatter(), "App.log")
    .CreateLogger();
票数 2
EN

Stack Overflow用户

发布于 2021-01-02 17:44:25

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

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

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

对于UTC,您可以在此文件中修改以下行

代码语言:javascript
复制
output.Write(logEvent.Timestamp.LocalDateTime.ToString("O"));

代码语言:javascript
复制
output.Write(logEvent.Timestamp.UtcDateTime.ToString("O"));

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

代码语言:javascript
复制
var logger = new LoggerConfiguration()
    .WriteTo.File(new YourCompactJsonFormatter(), "App.log")
    .CreateLogger();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60303283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档