在 Debian 上使用 Golang 时,“日志级别”怎么设,主要取决于你用的是什么日志库。下面按常见情况给你说明。
log(最简单,无级别概念)Go 标准库 log 本身没有日志级别(没有 debug/info/warn/error)。
import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("this is a log")
如果你想要“级别”,只能自己控制:
var debug = true
func Debug(msg string) {
if debug {
log.Println("[DEBUG]", msg)
}
}
或在 Debian 上用环境变量控制:
export APP_DEBUG=1
debug := os.Getenv("APP_DEBUG") == "1"
logrus(最常用)import "github.com/sirupsen/logrus"
func main() {
logrus.SetLevel(logrus.DebugLevel)
logrus.Debug("debug info")
logrus.Info("hello")
logrus.Warn("warning")
logrus.Error("error")
}
级别:
PanicLevelFatalLevelErrorLevelWarnLevelInfoLevelDebugLevelTraceLevel在 Debian 上常用环境变量控制:
export LOG_LEVEL=info
level, _ := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
logrus.SetLevel(level)
zap(高性能,推荐生产)import "go.uber.org/zap"
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("info log")
logger.Error("error log")
设置级别:
cfg := zap.NewProductionConfig()
cfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
logger, _ := cfg.Build()
动态修改(运行时):
atom := zap.NewAtomicLevel()
atom.SetLevel(zap.WarnLevel)
slog(Go 1.21+ 官方推荐 ✅)import "log/slog"
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
logger.Debug("debug")
logger.Info("info")
级别:
LevelDebug (-4)LevelInfo (0)LevelWarn (4)LevelError (8)Debian 环境示例:
export LOG_LEVEL=debug
var level slog.LevelVar
level.Set(slog.LevelDebug)
如果你用 systemd 跑 Go 程序:
[Service]
Environment=LOG_LEVEL=info
ExecStart=/opt/myapp/app
然后程序读取:
os.Getenv("LOG_LEVEL")
| 场景 | 推荐 |
|---|---|
| 简单脚本 | log |
| 通用项目 | logrus |
| 高性能服务 | zap |
| 新项目 | slog(官方) |
如果你愿意,可以告诉我:
我可以给你一份直接能用的配置示例。