温馨提示×

debian golang日志如何分级

小樊
43
2026-09-13 04:40:12
栏目: 编程语言

在 Debian 上使用 Golang 时,“日志分级”通常有两种理解:

  1. Golang 标准库 log 本身不分级
  2. 使用支持 level 的日志库(如 zap、logrus、slog)来做分级

下面按常见做法给你一个清晰说明。


一、Go 标准库 log(不分级)

Go 自带的 log没有日志级别概念

import "log"

log.Println("info")
log.Fatal("fatal")

只能靠前缀或自己封装来模拟:

log.SetPrefix("[INFO] ")
log.Println("this is info")

✅ 适合简单脚本
❌ 不适合生产环境


二、推荐:使用支持分级的日志库

1️⃣ Go 官方(1.21+):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+

2️⃣ 常用第三方库(经典方案)

logrus(老牌)

import "github.com/sirupsen/logrus"

logrus.SetLevel(logrus.InfoLevel)

logrus.Debug("debug")
logrus.Info("info")
logrus.Warn("warn")
logrus.Error("error")

zap(高性能,推荐微服务)

import "go.uber.org/zap"

logger, _ := zap.NewProduction()
logger.Info("info")
logger.Error("error")

三、Debian 上日志“系统级”分级(syslog)

如果你在 Debian 上用 syslog

import "log/syslog"

logwriter, _ := syslog.New(syslog.LOG_INFO, "myapp")
logwriter.Info("info message")

对应 Debian 的:

  • /var/log/syslog
  • /var/log/messages

四、生产建议(Debian + Go)

✅ 使用 slogzap
✅ 日志级别通过环境变量控制:

LOG_LEVEL=info ./yourapp

✅ 配合 systemd:

# /etc/systemd/system/yourapp.service
StandardOutput=journal
journalctl -u yourapp -p err

如果你愿意,我可以:

  • 给你一个 完整 slog 分级示例
  • 或讲 Debian + systemd + Go 日志最佳实践
  • 或对比 zap vs slog

你现在是写服务、脚本,还是容器里的 Go 程序?

0