在 Debian 上运行 Go 程序时,“日志格式怎么定”主要取决于你要给谁看、给什么系统收集。下面按常见场景给你一套实用方案。
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("server started")
默认格式:
2026/01/21 10:00:00 main.go:12: server started
✅ 优点:零依赖
❌ 缺点:格式不可控,不适合集中采集
Debian + systemd + 日志采集(Loki / ELK)首选
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("http request",
zap.String("method", "GET"),
zap.Int("status", 200),
zap.Duration("cost", 10*time.Millisecond),
)
输出示例:
{
"level":"info",
"ts":1705812000.123,
"msg":"http request",
"method":"GET",
"status":200,
"cost":0.01
}
✅ 适合:
Debian 默认用 systemd-journald
✅ 推荐格式(systemd 友好):
{"level":"info","msg":"start","pid":1234}
或:
level=info msg=start pid=1234
{"time":"ISO8601","level":"info","msg":"...","trace_id":"..."}
time=2026-01-21T10:00:00+08:00 level=info msg="server start"
[INFO] 2026-01-21 10:00:00 main.go:20 server start
[Unit]
Description=go service
[Service]
ExecStart=/opt/app/server
Restart=always
Environment=GIN_MODE=release
[Install]
WantedBy=multi-user.target
日志查看:
journalctl -u your-service -f
❌ 多行日志(journald 会截断)
❌ 自己写文件又不轮转
✅ 用 logrotate 或 stdout + journald
| 场景 | 推荐 |
|---|---|
| 小工具 | log |
| API 服务 | zap / slog |
| 微服务 | JSON + trace_id |
| Debian 系统服务 | stdout + systemd |
如果你愿意,可以告诉我:
log/slog)我可以直接给你一套可复制的日志模板。