首页 > 解决方案 > 使用日志包附加到当前行

问题描述

我正在编写一个 Go 程序并使用该log包写入日志文件,以便每个新行都有一个时间戳。有时我只想将文本附加到当前行,而不是使用前置时间戳开始新行。

我认为该log.Print()方法可以做到这一点,因为文档说它应该以与 fmt.Print() 相同的方式工作。相反,我发现每次调用都会Print()生成一个带有时间戳的新行。我在包中找不到另一种方法可以满足我的要求。

有没有办法做到这一点?

示例程序:

logFile, err := os.Create("myLog.log")
defer logFile.Close()
logger := log.New(logFile, "", log.LstdFlags)

logger.Println("Starting first round")
for i := 1; i < 4; i++ {
    request, err := http.NewRequest("GET", "http://www.someapi.com/pgNum=" + i, nil)
    response, err := client.Do(request)
    logger.Print(".")
}

logger.Println("Starting second round")
for j := 1; j < 4; j++ {
    request, err := http.NewRequest("GET", "http://www.someotherapi.com/pgNum=" + j, nil)
    response, err := client.Do(request)
    logger.Print(".")
}

logger.Println("Done")

电流输出:

2019/09/18 13:27:49 Starting first round
2019/09/18 13:27:49 .
2019/09/18 13:27:50 .
2019/09/18 13:27:51 .
2019/09/18 13:27:52 Starting second round
2019/09/18 13:27:52 .
2019/09/18 13:27:53 .
2019/09/18 13:27:54 .
2019/09/18 13:27:55 Done

期望的输出:

2019/09/18 13:27:49 Starting first round...
2019/09/18 13:27:52 Starting second round...
2019/09/18 13:27:55 Done

标签: gologging

解决方案


这是无法实现的。日志包总是添加行尾字符。请参阅log.go 第 169 行

日志可以由许多例程编写,因此您无法保证附加到先前记录的行。


推荐阅读