在 Debian 上,Go(Golang)程序本身不会自动进行日志分级,日志分级通常取决于你使用的日志库以及系统日志机制(如 systemd / rsyslog)。下面从几个层面说明。
log(默认无级别)Go 标准库 log 本身不支持级别:
log.Println("info")
log.Fatal("fatal")
需要自己封装:
log.Println("[INFO] xxx")
log.Println("[ERROR] xxx")
import "github.com/sirupsen/logrus"
logrus.SetLevel(logrus.InfoLevel)
logrus.Info("info msg")
logrus.Warn("warn msg")
logrus.Error("error msg")
级别:
PanicFatalErrorWarnInfoDebugTracelogger, _ := zap.NewProduction()
logger.Info("info")
logger.Error("error")
import "log/slog"
slog.SetLogLoggerLevel(slog.LevelInfo)
slog.Info("info")
slog.Error("error")
Go 程序作为 systemd 服务运行:
[Service]
ExecStart=/opt/myapp
StandardOutput=journal
StandardError=journal
查看日志:
journalctl -u myapp.service
emerg
alert
crit
err
warning
notice
info
debug
Go 程序可通过 syslog 或 systemd 写入对应级别:
import "log/syslog"
syslog.New(syslog.LOG_INFO, "myapp")
如果 Go 程序写 /var/log/syslog:
syslog.Syslog(syslog.LOG_ERR, "error message")
rsyslog 根据级别过滤:
*.err /var/log/error.log
✅ Go + systemd + slog/zap
journalctl| 层面 | 是否分级 | 方式 |
|---|---|---|
| Go 标准 log | ❌ | 手动加前缀 |
| logrus / zap / slog | ✅ | 日志库 |
| systemd journal | ✅ | syslog 级别 |
| rsyslog | ✅ | 配置文件 |
如果你愿意,我可以: