温馨提示×

debian golang日志级别怎么设

小樊
45
2026-10-15 21:31:19
栏目: 编程语言

在 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"

二、常用第三方日志库(推荐)

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")
}

级别:

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

在 Debian 上常用环境变量控制:

export LOG_LEVEL=info
level, _ := logrus.ParseLevel(os.Getenv("LOG_LEVEL"))
logrus.SetLevel(level)

2️⃣ 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)

3️⃣ 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)

三、在 Debian 服务中的常见做法(systemd)

如果你用 systemd 跑 Go 程序:

[Service]
Environment=LOG_LEVEL=info
ExecStart=/opt/myapp/app

然后程序读取:

os.Getenv("LOG_LEVEL")

四、总结建议

场景 推荐
简单脚本 log
通用项目 logrus
高性能服务 zap
新项目 slog(官方)

如果你愿意,可以告诉我:

  • 你用的是 哪个日志库
  • 是 开发 / 生产
  • 是否用 systemd / docker

我可以给你一份直接能用的配置示例。

0 踩