温馨提示×

debian golang日志如何存

小樊
38
2026-10-04 04:50:19
栏目: 编程语言

在 Debian 上运行 Golang 程序时,“日志如何存”通常可以从 三个层面 来看:
1)Golang 代码里怎么写日志
2)日志写到哪里(文件 / systemd / 集中式)
3)Debian 系统层面如何管理日志

下面给你一个实用、可落地的方案。


一、Golang 代码里如何记录日志

1️⃣ 标准库(简单场景)

log.SetOutput(os.Stdout)
log.Println("server started")

在 Debian 上如果用 systemd 启动,stdout 会自动进 journal。

2️⃣ 写文件(最常见)

f, _ := os.OpenFile("/var/log/myapp/app.log",
    os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(f)

⚠️ 注意:

  • /var/log/myapp 要存在
  • Debian 下建议属主为程序运行用户(如 myapp)

3️⃣ 使用成熟日志库(推荐)

  • logrus
  • zap(高性能)
  • slog(Go 1.21+ 官方)

示例(zap):

logger, _ := zap.NewProduction()
logger.Info("started", zap.String("env", "debian"))

二、日志存到哪里(推荐方式)

✅ 方式一:systemd + journal(最省心)

适合:服务类程序

# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App

[Service]
ExecStart=/usr/local/bin/myapp
User=myapp
Restart=always

[Install]
WantedBy=multi-user.target

日志查看:

journalctl -u myapp -f

✅ 优点:

  • 不用自己管日志轮转
  • 自动归档、权限安全

✅ 方式二:写到文件 + logrotate(传统方式)

适合:需要长期留存日志

目录:

mkdir -p /var/log/myapp
chown myapp:myapp /var/log/myapp

logrotate 配置:

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    copytruncate
}

✅ 方式三:集中式日志(生产环境推荐)

  • rsyslog → 远程
  • filebeat / vector → ES / Loki
  • systemd journal → fluentd

例如 Loki:

Golang → 文件 → promtail → Loki

三、Debian 日志管理建议

系统日志位置

路径 说明
/var/log/syslog 系统日志
/var/log/auth.log 认证
journalctl systemd

查看 Go 服务日志

journalctl -u myapp --since "1 hour ago"

四、生产环境最佳实践(总结)

✅ 推荐组合

Golang (zap/slog)
   ↓
systemd (journal)
   ↓
logrotate / Loki / ELK

✅ 不要做的事

  • 不要自己写复杂日志轮转
  • 不要 root 写日志
  • 不要日志无限增长

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

  • 是 服务程序还是命令行工具
  • 是否用 systemd
  • 日志要给 人看还是机器分析

我可以直接帮你写一份 完整 Debian + Golang 日志方案。

0 踩