在 Debian 上调整 Golang 程序的日志级别,主要取决于你用的是 标准库 log、第三方日志库(如 logrus、zap、slog),还是系统级日志(syslog/journalctl)。下面分情况说明。
log(最基础)标准库 log 本身不支持日志级别(没有 debug/info/warn/error)。
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("info message")
log.Fatalln("fatal message")
✅ 想“调级别”只能自己控制:
var debug = true
func debugLog(format string, v ...interface{}) {
if debug {
log.Printf("[DEBUG] "+format, v...)
}
}
运行时通过环境变量控制:
debug := os.Getenv("DEBUG") == "1"
启动:
DEBUG=1 ./yourapp
logrus(最常见)import "github.com/sirupsen/logrus"
logrus.SetLevel(logrus.DebugLevel)
级别:
PanicLevelFatalLevelErrorLevelWarnLevelInfoLevelDebugLevelTraceLevellevel, err := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
if err == nil {
logrus.SetLevel(level)
}
Debian 启动:
LOG_LEVEL=debug ./yourapp
或 systemd:
[Service]
Environment=LOG_LEVEL=info
zap(高性能)logger, _ := zap.NewDevelopment() // Debug
logger, _ := zap.NewProduction() // Info
cfg := zap.NewProductionConfig()
cfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
logger, _ := cfg.Build()
var level zap.AtomicLevel
level.SetLevel(zap.DebugLevel)
log/slog(官方推荐)logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
level := slog.LevelInfo
switch os.Getenv("LOG_LEVEL") {
case "debug":
level = slog.LevelDebug
case "warn":
level = slog.LevelWarn
}
如果程序输出到 stdout:
[Service]
Environment=LOG_LEVEL=info
StandardOutput=journal
查看日志:
journalctl -u yourapp -f
journalctl -u yourapp -p err
| 场景 | 建议 |
|---|---|
| 小工具 | log + 环境变量 |
| 通用服务 | logrus |
| 高性能 | zap |
| 新项目 | slog ✅ |
如果你能告诉我:
我可以直接给你一份可复制的配置。