去记录器打印时间戳
我有以下内容:
l := log.New(os.Stdout, "[AAA] ", 2)
l.Printf("Listening on %s", addr)
这打印出[AAA] Listening on ~
有什么方法可以配置log
包打印出来
2014-09-15 10:23:12 [AAA] Listening on ...
?
要获取您特定的请求输出,您可以将其包装在您自己的Log
函数中,并使用SetPrefix
设置前缀(或者在您自己的类型中嵌入一个记录器并使用另一个函数扩展它):
func Log(l *log.Logger, msg string) {
l.SetPrefix(time.Now().Format("2006-01-02 15:04:05") + " [AAA] ")
l.Print(msg)
}
例如:
l := log.New(os.Stdout, "", 0)
Log(l, "Log 1")
<-time.After(time.Second * 3)
Log(l, "Log 2")
..在我的机器上输出:
2014-10-02 11:12:14 [AAA] Log 1
2014-10-02 11:12:17 [AAA] Log 2
请注意,log
包具有可以使用的some predefined flags,但它们不会生成您在问题中请求的格式。为了得到它,你必须为标志传递零并自己动手。
l := log.New(os.Stdout, "[AAA] ", 2)
l.Printf("Listening on %s", addr)
打印[AAA] 17:07:51 Listening on ...
如果要添加日期,请使用log.Ldate | log.Ltime
作为标志:
l := log.New(os.Stdout, "[AAA] ", log.Ldate | log.Ltime)
l.Printf("Listening on %s", addr)
// [AAA] 2016-07-14 17:07:51 Listening on ...
但是为了拥有前缀之前的日期和时间,您可以使用自定义编写器:
type writer struct {
io.Writer
timeFormat string
}
func (w writer) Write(b []byte) (n int, err error) {
return w.Writer.Write(append([]byte(time.Now().Format(w.timeFormat)), b...))
}
然后,将自定义编写器传递给log的New
:
l := log.New(&writer{os.Stdout, "2006-01-02 15:04:05 "}, "[AAA] ", 0)
l.Printf("Listening on %s", addr)
// 2016-07-14 17:07:51 [AAA] Listening on ...
有一个完整的例子here。
设置去日志标志log flags:
log.SetFlags(LstdFlags)