温馨提示×

Golang日志时间怎么设置

小樊
41
2026-07-13 01:59:06
栏目: 编程语言

在 Go 里,日志时间怎么设置,取决于你用的是什么日志库。下面按常见情况给你总结一下。


一、使用标准库 log(最简单)

1️⃣ 默认情况(没有时间)

package main

import "log"

func main() {
	log.Println("hello")
}

输出:

hello

2️⃣ 给标准 log 加上时间(推荐)

使用 log.SetFlags

package main

import (
	"log"
)

func main() {
	log.SetFlags(log.LstdFlags) // 默认:2009/01/23 01:23:23
	log.Println("hello")
}

输出:

2009/01/23 01:23:23 hello

3️⃣ 自定义时间格式(标准库做不到)

⚠️ 标准库 log 不支持自定义时间格式

如果你需要:

  • 2024-01-01 12:00:00
  • RFC3339
  • 毫秒 / 微秒

必须自己封装或使用第三方库


二、标准库 log/slog(Go 1.21+ 推荐 ✅)

1️⃣ 默认时间

package main

import (
	"log/slog"
)

func main() {
	slog.Info("hello")
}

2️⃣ 设置时间格式(推荐方式)

package main

import (
	"log/slog"
	"os"
	"time"
)

func main() {
	handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
		ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
			if a.Key == slog.TimeKey {
				return slog.Attr{
					Key:   slog.TimeKey,
					Value: slog.StringValue(a.Value.Time().Format("2006-01-02 15:04:05")),
				}
			}
			return a
		},
	})

	logger := slog.New(handler)
	logger.Info("hello")
}

输出:

time=2024-01-01 12:00:00 level=INFO msg=hello

这是官方推荐方式


三、第三方日志库(最灵活)

1️⃣ logrus(老牌)

package main

import (
	"github.com/sirupsen/logrus"
)

func main() {
	log := logrus.New()
	log.SetFormatter(&logrus.TextFormatter{
		TimestampFormat: "2006-01-02 15:04:05",
		FullTimestamp:   true,
	})

	log.Info("hello")
}

2️⃣ zap(高性能,推荐生产)

package main

import (
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"time"
)

func main() {
	config := zap.NewProductionConfig()
	config.EncoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")

	logger, _ := config.Build()
	defer logger.Sync()

	logger.Info("hello")
}

四、Go 时间格式必须记住的“魔法字符串”

Go 的时间格式是固定的

2006-01-02 15:04:05
含义
2006
01
02
15
04
05

五、该怎么选?

场景 建议
简单程序 log.SetFlags(log.LstdFlags)
Go 1.21+ log/slog
生产环境 zap
历史项目 logrus

如果你愿意,可以告诉我:

  • ✅ Go 版本
  • ✅ 用的是什么日志库
  • ✅ 想要的时间格式(如 RFC3339 / 毫秒)

我可以直接给你一份可复制粘贴的示例代码

0