去记录器打印时间戳

4 go

去记录器打印时间戳

我有以下内容:

l := log.New(os.Stdout, "[AAA] ", 2)
l.Printf("Listening on %s", addr)
Run Code Online (Sandbox Code Playgroud)

这打印出来[AAA] Listening on ~

有什么方法可以配置log包打印出来

2014-09-15 10:23:12 [AAA] Listening on ...

Far*_*d T 6

l := log.New(os.Stdout, "[AAA] ", 2)
l.Printf("Listening on %s", addr)
Run Code Online (Sandbox Code Playgroud)

打印出来 [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 ...
Run Code Online (Sandbox Code Playgroud)

但是要在前缀之前添加日期和时间,您可以使用自定义编写器:

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...))
}
Run Code Online (Sandbox Code Playgroud)

然后,将自定义编写器传递给日志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 ...
Run Code Online (Sandbox Code Playgroud)

有一个完整的例子在这里


Sim*_*ead 5

要获取特定请求的输出,您可以将其包装在您自己的Log函数中,并每次使用设置前缀SetPrefix(或在您自己的类型中嵌入记录器并使用另一个函数扩展它):

func Log(l *log.Logger, msg string) {
    l.SetPrefix(time.Now().Format("2006-01-02 15:04:05") + " [AAA] ")
    l.Print(msg)
}
Run Code Online (Sandbox Code Playgroud)

例如:

l := log.New(os.Stdout, "", 0)

Log(l, "Log 1")

<-time.After(time.Second * 3)

Log(l, "Log 2")
Run Code Online (Sandbox Code Playgroud)

..在我的机器上输出:

2014-10-02 11:12:14 [AAA] Log 1
2014-10-02 11:12:17 [AAA] Log 2
Run Code Online (Sandbox Code Playgroud)

请注意,该log包有一些您可以使用的预定义标志,但是它们不会生成您在问题中请求的格式。为了得到完全一样的结果,你必须为标志传递零并自己做。