温馨提示×

golang日志格式linux如何设

小樊
40
2026-09-05 15:19:13
栏目: 编程语言

在 Linux 上运行 Go 程序时,“日志格式”通常可以从 3 个层面来设置:


一、Go 代码层面(最常见)

1. 使用标准库 log

log.SetFlags(log.LstdFlags | log.Lshortfile)

常用 flag:

  • log.Ldate:日期 2009/01/23
  • log.Ltime:时间 01:23:23
  • log.Lmicroseconds
  • log.Llongfile / log.Lshortfile:文件名行号
  • log.LUTC

示例(类 Linux 日志格式):

log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)

2. 使用 logrus(推荐)

import "github.com/sirupsen/logrus"

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

logrus.SetLevel(logrus.InfoLevel)

JSON 格式(适合 Linux + 容器):

logrus.SetFormatter(&logrus.JSONFormatter{})

3. 使用 zap(高性能)

cfg := zap.NewProductionConfig()
cfg.Encoding = "json"
cfg.OutputPaths = []string{"stdout"}
logger, _ := cfg.Build()

二、Linux 系统层面(systemd)

如果是 systemd 服务:

1. 写 journald

[Service]
ExecStart=/opt/app/app
StandardOutput=journal
StandardError=journal

查看:

journalctl -u app.service -f

2. 输出到文件

[Service]
ExecStart=/opt/app/app >> /var/log/app.log 2>&1

三、日志轮转(Linux 推荐)

使用 logrotate:

/var/log/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

四、常见推荐格式(Linux 服务器)

✅ 容器 / K8s

{"time":"2026-01-21T10:00:00Z","level":"info","msg":"start"}

✅ 物理机 / 虚拟机

2026-01-21 10:00:00 INFO main.go:23 start server

如果你能告诉我:

  • 用哪个日志库(log / logrus / zap)
  • 是否用 systemd / Docker / K8s

我可以给你 直接可用的配置示例。

0 踩