温馨提示×

Golang日志的格式化输出有哪些选项

小樊
50
2026-01-09 16:36:28
栏目: 编程语言

在Golang中,日志的格式化输出可以通过log包中的SetFlagsSetPrefix方法进行设置。以下是一些常用的选项:

  1. log.Ldate: 日期
  2. log.Ltime: 时间
  3. log.Llongfile: 文件名和行号
  4. log.Lshortfile: 文件名(不包含行号)
  5. log.LUTC: 使用UTC时间

你可以通过按位或操作符(|)将这些选项组合在一起。例如,如果你想要在日志中同时显示日期、时间和文件名及行号,可以这样设置:

package main

import (
	"log"
)

func main() {
	log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
	log.Println("这是一条日志信息")
}

此外,你还可以通过自定义log.Formatter接口来实现更复杂的日志格式化输出。例如,你可以创建一个自定义的格式化器,将日志输出为JSON格式:

package main

import (
	"encoding/json"
	"log"
	"os"
	"time"
)

type JSONFormatter struct{}

func (f JSONFormatter) Format(entry *log.Entry) ([]byte, error) {
	record := struct {
		Time        string      `json:"time"`
		Level       string      `json:"level"`
		Message     string      `json:"message"`
		Stacktrace  []string    `json:"stacktrace,omitempty"`
		Additional  map[string]interface{} `json:"additional,omitempty"`
	}{
		Time:      entry.Time.Format(time.RFC3339),
		Level:     entry.Level.String(),
		Message:   entry.Message,
		Additional: entry.Data,
	}

	if len(entry.Stacktrace) > 0 {
		record.Stacktrace = entry.Stacktrace
	}

	return json.Marshal(record)
}

func main() {
	logger := log.New(os.Stdout, "", log.LstdFlags)
	logger.SetFormatter(JSONFormatter{})
	logger.Println("这是一条日志信息")
}

这个例子中,我们创建了一个名为JSONFormatter的结构体,并实现了log.Formatter接口的Format方法。在Format方法中,我们将日志条目转换为一个包含时间、级别、消息和其他附加信息的结构体,并将其序列化为JSON格式。然后,我们创建了一个新的log.Logger实例,并将其格式化器设置为JSONFormatter。最后,我们使用这个自定义格式化器输出一条日志信息。

0