Grzegorz Żur прав в своем ответе.Поскольку пакет log
всегда добавляет новую строку в конец каждой строки, записываемой в журнал, при использовании этого Writer невозможно добавить больше текста в конец этой строки, даже если вы вводите другой типПисатель делает дополнения.Я закончил тем, что бросил свой собственный.
Пакет:
package mylogger
import (
"os"
"bufio"
"time"
)
var logWriter *bufio.Writer
func InitLogFile() (*os.File, error) {
logFile, err := os.Create(logPath)
if err != nil {
return nil, err
}
logWriter = bufio.NewWriter(logFile)
return logFile, nil
}
func Print(msg string) {
if logWriter != nil {
logWriter.WriteString(msg)
logWriter.Flush()
}
}
func NewLine(msg string) {
if logWriter != nil {
logWriter.WriteString("\n" + time.Now().Format("2006/02/01 15:04:05") + " " + msg)
logWriter.Flush()
}
}
Основная программа:
logFile, err := mylogger.InitLogFile()
defer logFile.Close()
mylogger.NewLine("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)
mylogger.Print(".")
}
mylogger.NewLine("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)
mylogger.Print(".")
}
mylogger.NewLine("Done")
Получил желаемый результат.
Важное примечание: это работает только потому, что моя программа работает в одном потоке и имеет линейный поток.Если бы был какой-либо параллелизм, когда разные функции могли бы вызывать функцию регистрации в любое время, это очень быстро распадалось бы.
Это не моя настоящая программа, а сокращенная суть того, что она делает.Обработка ошибок опущена для краткости.Я не эксперт по Go, поэтому я открыт для комментариев.