温馨提示×

golang在debian日志如何分级

小樊
44
2026-09-07 06:12:27
栏目: 编程语言

在 Debian 上,Go(Golang)程序本身不会自动进行日志分级,日志分级通常取决于你使用的日志库以及系统日志机制(如 systemd / rsyslog)。下面从几个层面说明。


一、Go 语言层面的日志分级

1. 标准库 log(默认无级别)

Go 标准库 log 本身不支持级别

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

需要自己封装:

log.Println("[INFO] xxx")
log.Println("[ERROR] xxx")

2. 常用日志库(推荐)

✅ logrus(经典)

import "github.com/sirupsen/logrus"

logrus.SetLevel(logrus.InfoLevel)
logrus.Info("info msg")
logrus.Warn("warn msg")
logrus.Error("error msg")

级别:

  • Panic
  • Fatal
  • Error
  • Warn
  • Info
  • Debug
  • Trace

✅ zap(高性能,推荐生产)

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

✅ slog(Go 1.21+ 官方)

import "log/slog"

slog.SetLogLoggerLevel(slog.LevelInfo)
slog.Info("info")
slog.Error("error")

二、Debian 系统层面的日志分级

1. systemd(最常见)

Go 程序作为 systemd 服务运行:

[Service]
ExecStart=/opt/myapp
StandardOutput=journal
StandardError=journal

查看日志:

journalctl -u myapp.service

systemd 日志优先级(syslog 级别)

emerg
alert
crit
err
warning
notice
info
debug

Go 程序可通过 syslogsystemd 写入对应级别:

import "log/syslog"

syslog.New(syslog.LOG_INFO, "myapp")

2. rsyslog(传统方式)

如果 Go 程序写 /var/log/syslog

syslog.Syslog(syslog.LOG_ERR, "error message")

rsyslog 根据级别过滤:

*.err    /var/log/error.log

三、典型推荐方案(生产)

Go + systemd + slog/zap

  • Go 内部做级别控制
  • systemd 负责采集和存储
  • 日志统一进 journalctl

四、小结

层面 是否分级 方式
Go 标准 log 手动加前缀
logrus / zap / slog 日志库
systemd journal syslog 级别
rsyslog 配置文件

如果你愿意,我可以:

  • 给你一个 systemd + Go 日志分级完整示例
  • 或针对 Docker / Kubernetes 场景说明

0