温馨提示×

Debian Golang日志级别怎调

小樊
36
2026-10-10 01:54:51
栏目: 编程语言

在 Debian 上调整 Golang 程序的日志级别,主要取决于你用的是 标准库 log、第三方日志库(如 logrus、zap、slog),还是系统级日志(syslog/journalctl)。下面分情况说明。


一、使用 Go 标准库 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(最常见)

1️⃣ 设置日志级别

import "github.com/sirupsen/logrus"

logrus.SetLevel(logrus.DebugLevel)

级别:

  • PanicLevel
  • FatalLevel
  • ErrorLevel
  • WarnLevel
  • InfoLevel
  • DebugLevel
  • TraceLevel

2️⃣ 通过环境变量(推荐)

level, 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(高性能)

1️⃣ 开发 / 生产模式

logger, _ := zap.NewDevelopment() // Debug
logger, _ := zap.NewProduction()  // Info

2️⃣ 自定义级别

cfg := zap.NewProductionConfig()
cfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
logger, _ := cfg.Build()

3️⃣ 运行时动态调整

var level zap.AtomicLevel
level.SetLevel(zap.DebugLevel)

四、使用 Go 1.21+ log/slog(官方推荐)

1️⃣ 设置级别

logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
    Level: slog.LevelDebug,
}))

2️⃣ 环境变量控制

level := slog.LevelInfo
switch os.Getenv("LOG_LEVEL") {
case "debug":
    level = slog.LevelDebug
case "warn":
    level = slog.LevelWarn
}

五、Debian systemd 服务日志级别

如果程序输出到 stdout:

[Service]
Environment=LOG_LEVEL=info
StandardOutput=journal

查看日志:

journalctl -u yourapp -f
journalctl -u yourapp -p err

六、快速选择建议

场景 建议
小工具 log + 环境变量
通用服务 logrus
高性能 zap
新项目 slog ✅

如果你能告诉我:

  • 用的 哪个日志库
  • 是否 systemd 启动
  • 想 运行时动态调整还是启动固定

我可以直接给你一份可复制的配置。

0 踩