Golang日志记录问题求助
Golang日志记录问题求助 你好,我是新来的。很抱歉需要寻求帮助,情况是这样的:我请一位开发者为我用Golang开发了一个特定用途的系统,但不幸的是,他后来失联了。现在我有几个(主要是格式方面的)问题需要解决,基本上只能通过阅读代码从头开始学习。
目前,我的日志产生了以下结果:
|09:40:55.622|2018-10-29,2019-10-29, 2.07447ms| |09:40:55.822|2018-10-29,2019-10-29, 2.057991ms| |09:40:56.022|2018-10-29,2019-10-29, 2.441781ms| |09:40:56.222|2018-10-29,2019-10-29, 2.0848ms|
我需要将末尾的“响应”时间格式化为小数点后保留两位数字,以确保格式一致。例如,应该是 2.07ms、2.05ms、2.44ms 等。
我认为需要修改的代码在下面这段里,但我不太确定。有人能帮忙吗?
(提供的代码不相关)
更多关于Golang日志记录问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这段代码或许有帮助?我真的是基于有限的知识在猜测。
(提供的代码不相关)
更多关于Golang日志记录问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
据我所知,在你展示的函数中,日志记录器甚至没有被使用。
该函数中也没有其他会写入或生成字符串的内容。至少,如果存在这样的功能,它也被隐藏在我们无法窥见的函数调用背后了。
嗯,其实并非如此,实际上那里记录的只有一条级别为 debug 的消息“Processing started”。
此外,从您之前的消息中可以看出,日志记录使用了 zap,它会将日志输出为 JSON 格式。
您之前帖子中展示的示例输出并非 JSON 格式。因此,这可能与任何日志记录无关,而是在其他地方生成的。
是的,“处理已开始”是我唯一能追踪的线索,因为它出现在日志文件中那些具体的日期/响应时间报告之前。
对于一个基于我不熟悉的代码开发的系统,这就是我遇到的麻烦。然后开发者消失了,而我有一大堆工作要处理(可能需要推荐,哈哈)。
我能找到的唯一其他代码片段是:
(提供的代码不相关)
感谢您的帮助,我怀疑您是对的,它是在打印前通过其他方式生成的。通过文本编辑器搜索,没有发现任何这些条目类型的迹象。
我可能需要请一位Go语言的“专家”来协助系统的开发。这个改动只是一个小的改进,但后续还有更大的工作量,需要通过git获得完整的代码访问权限。
如果您或任何人知道有谁对有偿工作感兴趣,愿意帮助我开发这个系统,我将不胜感激。
根据你的需求,需要将日志中响应时间的格式统一为保留两位小数。从你提供的日志示例来看,响应时间格式不一致,有的有三位小数,有的有四位小数。
以下是修改日志格式的示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 模拟你的响应时间
responseTimes := []time.Duration{
2074470 * time.Nanosecond, // 2.07447ms
2057991 * time.Nanosecond, // 2.057991ms
2441781 * time.Nanosecond, // 2.441781ms
2084800 * time.Nanosecond, // 2.0848ms
}
currentTime := time.Now()
for _, rt := range responseTimes {
// 格式化时间部分
timeStr := currentTime.Format("15:04:05.000")
// 格式化响应时间,保留两位小数
// 将纳秒转换为毫秒并保留两位小数
ms := float64(rt.Nanoseconds()) / 1_000_000.0
responseStr := fmt.Sprintf("%.2fms", ms)
// 输出格式化后的日志
fmt.Printf("|%s|2018-10-29,2019-10-29, %s|\n", timeStr, responseStr)
// 模拟时间递增
currentTime = currentTime.Add(200 * time.Millisecond)
}
}
如果你的代码中已经使用了 time.Duration 类型来记录响应时间,可以直接这样格式化:
// 假设 responseTime 是 time.Duration 类型
func formatResponseTime(responseTime time.Duration) string {
ms := float64(responseTime.Nanoseconds()) / 1_000_000.0
return fmt.Sprintf("%.2fms", ms)
}
或者如果你使用的是浮点数表示毫秒:
// 假设 responseTime 是 float64 类型,单位是毫秒
func formatResponseTime(responseTime float64) string {
return fmt.Sprintf("%.2fms", responseTime)
}
在你的日志记录代码中,找到输出响应时间的地方,将原来的格式替换为 fmt.Sprintf("%.2fms", responseTimeInMs) 即可。
运行示例代码的输出结果:
|09:40:55.622|2018-10-29,2019-10-29, 2.07ms|
|09:40:55.822|2018-10-29,2019-10-29, 2.06ms|
|09:40:56.022|2018-10-29,2019-10-29, 2.44ms|
|09:40:56.222|2018-10-29,2019-10-29, 2.08ms|
这样就能确保所有响应时间都统一保留两位小数格式了。


