在 Debian 上使用 Golang 时,“日志分级”通常有两种理解:
log 本身不分级下面按常见做法给你一个清晰说明。
log(不分级)Go 自带的 log 包 没有日志级别概念:
import "log"
log.Println("info")
log.Fatal("fatal")
只能靠前缀或自己封装来模拟:
log.SetPrefix("[INFO] ")
log.Println("this is info")
✅ 适合简单脚本
❌ 不适合生产环境
log/slog(推荐)slog 是 Go 官方结构化日志,支持等级:
import (
"log/slog"
"os"
)
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
logger.Debug("debug msg") // 不会输出
logger.Info("info msg")
logger.Warn("warn msg")
logger.Error("error msg")
日志级别:
Debug (-4)Info (0)Warn (4)Error (8)在 Debian 上只需:
go version
# go 1.21+
import "github.com/sirupsen/logrus"
logrus.SetLevel(logrus.InfoLevel)
logrus.Debug("debug")
logrus.Info("info")
logrus.Warn("warn")
logrus.Error("error")
import "go.uber.org/zap"
logger, _ := zap.NewProduction()
logger.Info("info")
logger.Error("error")
如果你在 Debian 上用 syslog:
import "log/syslog"
logwriter, _ := syslog.New(syslog.LOG_INFO, "myapp")
logwriter.Info("info message")
对应 Debian 的:
/var/log/syslog/var/log/messages✅ 使用 slog 或 zap
✅ 日志级别通过环境变量控制:
LOG_LEVEL=info ./yourapp
✅ 配合 systemd:
# /etc/systemd/system/yourapp.service
StandardOutput=journal
journalctl -u yourapp -p err
如果你愿意,我可以:
你现在是写服务、脚本,还是容器里的 Go 程序?