温馨提示×

如何管debian golang日志

小樊
41
2026-10-04 04:55:17
栏目: 编程语言

在 Debian 上管理 Golang 程序的日志,通常可以从应用层日志方案、系统级日志管理(systemd/journald)、日志轮转(logrotate)以及集中式日志几个层面来做。下面按实用角度说明。


一、Golang 应用层日志方案

1. 标准库(简单场景)

log.SetOutput(os.Stdout)
log.Println("hello")

配合 systemd 捕获 stdout/stderr 即可。

2. 常用日志库(推荐)

  • logrus
  • zap(高性能)
  • slog(Go 1.21+ 官方结构化日志)

示例(slog):

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("server start", "port", 8080)

✅ 建议:输出到 stdout/stderr,由系统统一收集。


二、Debian + systemd 管理 Golang 日志(最推荐)

1. 编写 service 文件

/etc/systemd/system/myapp.service

[Unit]
Description=My Go App
After=network.target

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=appuser
Restart=on-failure
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2. 查看日志

journalctl -u myapp.service
journalctl -u myapp.service -f
journalctl -u myapp.service --since "1 hour ago"

✅ 优点:

  • 自动时间戳
  • 自动轮转
  • 权限安全

三、日志文件 + logrotate(写文件时)

如果你必须写日志文件:

1. Go 中写文件

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10, // MB
    MaxBackups: 5,
    MaxAge:     30,
})

(lumberjack 自动切分)

2. Debian logrotate

/etc/logrotate.d/myapp

/var/log/myapp/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

四、日志级别与环境区分

if env == "prod" {
    logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
} else {
    logger = slog.New(slog.NewTextHandler(os.Stdout, nil))
}

五、集中式日志(进阶)

  • rsyslog → ELK
  • vector
  • Loki + Promtail
  • Fluent Bit

适合多服务、多机环境。


六、推荐实践总结 ✅

场景 推荐方式
单服务 stdout + systemd
写文件 lumberjack + logrotate
生产环境 JSON 日志 + journald
多服务 Loki / ELK

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

  • 是否是 systemd 服务
  • 是否 写文件
  • 是否 Docker / K8s

我可以给你一套完整配置示例。

0 踩