在 Linux 上运行 Go 程序时,“日志格式”通常可以从 3 个层面来设置:
loglog.SetFlags(log.LstdFlags | log.Lshortfile)
常用 flag:
log.Ldate:日期 2009/01/23log.Ltime:时间 01:23:23log.Lmicrosecondslog.Llongfile / log.Lshortfile:文件名行号log.LUTC示例(类 Linux 日志格式):
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
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{})
zap(高性能)cfg := zap.NewProductionConfig()
cfg.Encoding = "json"
cfg.OutputPaths = []string{"stdout"}
logger, _ := cfg.Build()
如果是 systemd 服务:
[Service]
ExecStart=/opt/app/app
StandardOutput=journal
StandardError=journal
查看:
journalctl -u app.service -f
[Service]
ExecStart=/opt/app/app >> /var/log/app.log 2>&1
使用 logrotate:
/var/log/app.log {
daily
rotate 7
compress
missingok
notifempty
}
✅ 容器 / K8s
{"time":"2026-01-21T10:00:00Z","level":"info","msg":"start"}
✅ 物理机 / 虚拟机
2026-01-21 10:00:00 INFO main.go:23 start server
如果你能告诉我:
我可以给你 直接可用的配置示例。