Unix log15库将记录的历元时间从纳秒缩短到秒

Unix log15库将记录的历元时间从纳秒缩短到秒,unix,go,logging,time,epoch,Unix,Go,Logging,Time,Epoch,我希望在我的golang项目中使用毫秒精度的日志记录,目前使用的是log15库 问题是,当我将它附加到上下文中时,它会返回到秒 newTimeWithMilliseconds := time.Unix(0, time.Now().UnixNano()) return log.FuncHandler(func(r *log.Record) { r.Ctx = append(r.Ctx, "time", newTimeWithMilliseconds) nextHandler.

我希望在我的golang项目中使用毫秒精度的日志记录,目前使用的是log15库

问题是,当我将它附加到上下文中时,它会返回到秒

newTimeWithMilliseconds := time.Unix(0, time.Now().UnixNano())

return log.FuncHandler(func(r *log.Record) {
     r.Ctx = append(r.Ctx, "time", newTimeWithMilliseconds)
     nextHandler.Log(r)
})
当我将其转换为字符串newtimewithmillizes.string时,它起作用,我得到2018-09-25 15:07:45.25801232-0500 PDT,但当我不这样做时,小数消失,我得到2018-09-25 15:07:45-0700 PDT

但我想保持时间格式,不使用字符串,有人知道为什么会发生这种情况以及如何解决吗?

您需要使用它来显示您的时间。时间的值具有您想要的精度。除非你修改它的值,否则它不会失去它的精度,你看到差异的原因只是因为时间调用所使用的布局。打印时间的任何内容的格式

当您使用mytime.String时,所使用的布局与打印您的时间的其他布局不同

这就是为什么您需要使用time.time值,但要操纵其打印方式,或者将其存储为格式化字符串

输出

2009-11-10T23:00:00Z
2012-11-01 22:08:41 +0000 UTC
11:00PM
Tue Nov 10 23:00:00 2009
2009-11-10T23:00:00+00:00
0000-01-01 20:41:00 +0000 UTC
2009-11-10T23:00:00-00:00
parsing time "8:41PM" as "Mon Jan _2 15:04:05 2006": cannot parse "8:41PM" as "Mon"

自己尝试一下

time.Format返回一个字符串,我想使用实际的时间类型,而不是字符串如果您将其用作时间。时间,除非您修改它,否则它仍应具有相同的精度。我猜你观察到的不同之处在于你打印它的方式。在time.time上调用.String会以显示ms的方式对其进行格式化,而您尝试的另一种方法则不会,因为它使用了不同的格式布局。因此,如果您希望显示毫秒精度,则必须传递字符串而不是按您希望的方式格式化的时间,或者传递时间。通过强制执行足够精确的格式来控制打印时间的函数。这是正确的答案@user3226932您不想要实际的时间类型,这就是您所拥有的,您正在抱怨它。因此,要解决这个问题,我们只能更改日志库中的时间格式常量,golang上下文的时间只接受时间类型,而不是字符串
2009-11-10T23:00:00Z
2012-11-01 22:08:41 +0000 UTC
11:00PM
Tue Nov 10 23:00:00 2009
2009-11-10T23:00:00+00:00
0000-01-01 20:41:00 +0000 UTC
2009-11-10T23:00:00-00:00
parsing time "8:41PM" as "Mon Jan _2 15:04:05 2006": cannot parse "8:41PM" as "Mon"