温馨提示×

golang日志debian如何部署

小樊
46
2026-09-10 03:42:12
栏目: 编程语言

下面按从零到上线的思路,讲一下 Go 程序 + 日志方案 在 Debian 上的部署方式,包括常见做法和推荐方案。


一、准备 Go 运行环境(Debian)

1. 安装 Go(推荐官方二进制)

sudo apt update
sudo apt install -y wget

wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz

# 写入环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

验证:

go version

二、Go 日志基础(代码层面)

1. 使用标准库(简单)

log.SetOutput(os.Stdout)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("server started")

⚠️ 生产环境不建议直接写文件,交给系统管理更好。


2. 推荐日志库

  • log/slog(Go 1.21+,官方)
  • zap(高性能)
  • logrus(老牌)

示例(slog):

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

✅ 统一输出到 stdout / stderr


三、Debian 日志管理方式(重点)

✅ 推荐方案:systemd + journald

1. 编译 Go 程序

go build -o /opt/myapp/app main.go

2. 创建 systemd 服务

sudo vim /etc/systemd/system/myapp.service

示例:

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

[Service]
ExecStart=/opt/myapp/app
WorkingDirectory=/opt/myapp
User=appuser
Restart=always
Environment=GO_ENV=production

[Install]
WantedBy=multi-user.target

3. 启动服务

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

4. 查看日志(journald)

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

✅ 好处:

  • 自动轮转
  • 不需要自己管日志文件
  • 可集中收集(rsyslog / loki)

四、如果你一定要写日志文件

方案 A:Go 写文件 + logrotate

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

logrotate 配置

sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

⚠️ copytruncate 对 Go 程序友好


五、生产推荐架构(最佳实践)

Go App (stdout)
   ↓
systemd / journald
   ↓
logrotate / 中央日志(Loki / ELK)

✅ 不要自己造日志系统


六、常见问题

Q1: 日志中文乱码?

export LANG=en_US.UTF-8

Q2: systemd 不打印日志?

  • 确认输出到 stdout/stderr
  • 不要用 nohup xxx &

Q3: 权限问题?

sudo useradd -r -s /bin/false appuser
sudo chown -R appuser:appuser /opt/myapp

七、总结(一句话)

Debian 上部署 Go 日志:程序只打 stdout,systemd + journald 管日志,生产环境别自己写文件。

如果你愿意,我可以:

  • 给你一套 完整 systemd + Go + 日志模板
  • 或讲 Docker + Debian + 日志方案
  • 或 Loki / ELK 接入方式

你想用哪种?

0 踩