使用log package时,Go会输出类似
的内容2009/11/10 23:00:00 Hello, world
如何将日期和时间格式更改为dd.mm.yyy hh:mm:ss
之类的内容?示例(playground link):
package main
import "log"
func main() {
log.Println("Hello, playground")
}
答案 0 :(得分:25)
就像后面所说的那样,你可以通过实现一个写函数来定义一个自定义的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]这是记录的内容!
答案 1 :(得分:4)
根据来源(http://golang.org/src/pkg/log/log.go),没有内置的方法可以做到这一点:
26 // Bits or'ed together to control what's 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
您需要使用第三方软件包,或者按照所描述的那样拦截日志输出。
答案 2 :(得分:3)
使用过滤日志行的自定义编写器将其修改为您需要的格式。它应该很容易,因为标题的格式是常规的并且是固定宽度的。然后调用log.SetOutput(myFilterWriter(os.Stderr))。
答案 3 :(得分:1)
使用Logger系统内部的标志要容易得多。
log.SetFlags(log.Lmicroseconds)
使用此标志可以将时间戳(以微秒为单位)添加到日志中。 其他可用选项是:
const (
Ldate = 1 << iota // the date in the local time zone: 2009/01/23
Ltime // the time in the local time zone: 01:23:23
Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime.
Llongfile // full file name and line number: /a/b/c/d.go:23
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone
Lmsgprefix // move the "prefix" from the beginning of the line to before the message
LstdFlags = Ldate | Ltime // initial values for the standard logger
)
Golang记录器文档可用here