在 Debian 上“调 Golang 日志”,一般分 系统/环境层 和 代码层 两块。下面按常见场景给你一套实用做法。
如果你的 Go 程序是用 systemd 管理的:
sudo journalctl -u your-service.service -f
常用参数:
journalctl -u your-service.service -n 100 # 最近100行
journalctl -u your-service.service --since "10 min ago"
journalctl -u your-service.service -p err # 只看错误
tail -f /var/log/your-app.log
log(最基础)import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("hello")
常用 flag:
log.Ldatelog.Ltimelog.Lmicrosecondslog.Llongfilelog.Lshortfile输出到文件:
log.SetOutput(os.Stdout) // 或文件
log/slog(Go 1.21+)官方现代日志库,支持级别和结构化。
import (
"log/slog"
"os"
)
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
slog.SetDefault(logger)
slog.Debug("debug msg", "key", "value")
slog.Info("info msg")
slog.Error("error", "err", err)
JSON 日志(生产常用):
slog.NewJSONHandler(os.Stdout, nil)
logger, _ := zap.NewProduction()
logger.Info("msg", zap.String("key", "val"))
log.SetLevel(log.DebugLevel)
level := os.Getenv("LOG_LEVEL")
Debian 启动前:
LOG_LEVEL=debug ./yourapp
[Service]
Environment=LOG_LEVEL=debug
journalctl -u your-app -p err -b
sudo apt install delve
dlv exec ./yourapp
journalctl -usudo timedatectl set-timezone Asia/Shanghai
如果你能具体说:
我可以直接给你一套配置示例。