Как изменить формат даты и времени пакета журнала Go
При использовании пакета журнала Go выводит что-то вроде
2009/11/10 23:00:00 Hello, world
Как изменить формат даты и времени на что-то вроде dd.mm.yyy hh:mm:ss
? Пример (ссылка на игровые площадки):
package main
import "log"
func main() {
log.Println("Hello, playground")
}
Ответы
Ответ 1
Как сказал yed posterior, вы можете определить пользовательский io.Writer, выполнив функцию записи. Вы также, вероятно, захотите сделать log.SetFlags(0), чтобы получить полный контроль. Вот пример, который изменяет формат даты, а также добавляет информацию об уровне журнала.
type logWriter struct {
}
func (writer logWriter) Write(bytes []byte) (int, error) {
return fmt.Print(time.Now().UTC().Format("2006-01-02T15:04:05.999Z") + " [DEBUG] " + string(bytes))
}
func main() {
log.SetFlags(0)
log.SetOutput(new(logWriter))
log.Println("This is something being logged!")
}
выходы:
2016-03-21T19: 54: 28.563Z [DEBUG] Это что-то записывается!
Ответ 2
Согласно источнику (http://golang.org/src/pkg/log/log.go), нет встроенного способа сделать это:
26 // Bits or'ed together to control what printed. There is no control over the
27 // order they appear (the order listed here) or the format they present (as
28 // described in the comments). A colon appears after these items:
29 // 2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Для этого вам потребуется использовать сторонний пакет или перехватить вывод журнала, как описано выше.
Ответ 3
Используйте настраиваемый сценарий, который фильтрует строки журнала, чтобы изменить их в нужном формате. Это должно быть легко, потому что формат заголовка является регулярным и фиксированным. Затем вызовите log.SetOutput(myFilterWriter (os.Stderr)).