如何更改Go日志包的日期/时间格式

taor4pac  于 2023-09-28  发布在  Go
关注(0)|答案(4)|浏览(158)

当使用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")
}
wgx48brx

wgx48brx1#

就像yed posterior说的,你可以通过实现一个write函数来定义一个自定义的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- 21 T19:54:28.563Z [DEBUG]这是正在记录的东西!

cvxl0en2

cvxl0en22#

根据源代码(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

您需要使用第三方软件包,或者按照yed所述截取日志输出。

gcmastyq

gcmastyq3#

使用自定义编写器过滤日志行,将其修改为所需的格式。这应该很容易,因为头部的格式是规则的和固定宽度的。然后调用log.SetOutput(myFilterWriter(os.Stderr))。

jmp7cifd

jmp7cifd4#

使用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 logger文档可在此处获得

相关问题