温馨提示×

Golang日志格式怎么修改

小樊
43
2026-07-13 01:15:06
栏目: 编程语言

在 Go 里“修改日志格式”取决于你用的是 标准库 log 还是 第三方日志库。下面按常见场景给你一个清晰对照。


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

1️⃣ 默认格式

log.Println("hello")

输出:

2026/01/15 10:00:00 hello

2️⃣ 修改日志前缀和时间格式

log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
log.SetPrefix("[APP] ")

log.Println("hello")

输出:

[APP] 2026/01/15 10:00:00.123456 hello

常用 flag:

Flag 含义
log.Ldate 日期
log.Ltime 时间
log.Lmicroseconds 微秒
log.Llongfile 文件名+行号
log.Lshortfile 短文件名+行号

缺点:格式固定,不能自定义 JSON 或复杂格式。


二、自定义日志格式(标准库进阶)

自己封装 log.Logger

type MyLogger struct {
    logger *log.Logger
}

func (l *MyLogger) Infof(format string, args ...interface{}) {
    msg := fmt.Sprintf(format, args...)
    l.logger.Printf("INFO  %s", msg)
}

func main() {
    logger := &MyLogger{
        logger: log.New(os.Stdout, "", 0),
    }
    logger.Infof("user %s login", "tom")
}

输出:

INFO  user tom login

三、推荐:使用 log/slog(Go 1.21+,官方结构化日志)

现代、推荐

1️⃣ 文本格式

logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
logger.Info("hello", "user", "tom", "age", 18)

输出:

time=2026-01-15T10:00:00.000+0800 level=INFO msg=hello user=tom age=18

2️⃣ JSON 格式(最常用)

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("hello", "user", "tom")

输出:

{"time":"2026-01-15T10:00:00.000+0800","level":"INFO","msg":"hello","user":"tom"}

3️⃣ 自定义 slog 格式(高级)

opts := &slog.HandlerOptions{
    Level: slog.LevelInfo,
}
handler := slog.NewJSONHandler(os.Stdout, opts)
logger := slog.New(handler)

四、第三方日志库(更灵活)

1️⃣ logrus(老牌,但已不活跃)

log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.WithFields(logrus.Fields{
    "user": "tom",
}).Info("login")

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

logger, _ := zap.NewProduction()
defer logger.Sync()

logger.Info("hello",
    zap.String("user", "tom"),
)

五、怎么选?

场景 推荐
简单程序 log
新项目 log/slog
高性能 / 微服务 zap
老项目 logrus

六、一句话总结

Go 修改日志格式

  • 标准库:log.SetFlags / SetPrefix
  • 现代方式:log/slog(JSON / 文本)
  • 高阶需求:用 zaplogrus

如果你能告诉我:

  • ✅ Go 版本
  • ✅ 是否要 JSON
  • ✅ 是否微服务 / 云原生

我可以直接给你一套生产级日志配置模板

0