温馨提示×

怎样导出debian golang日志

小樊
47
2026-09-10 03:45:09
栏目: 编程语言

在 Debian 系统上导出 Go(Golang)程序的日志,通常取决于日志写在哪里以及你使用什么方式运行程序。下面按常见场景说明。


一、Go 程序直接输出到标准输出(stdout / stderr)

这是最常见情况,尤其是用 fmt.Println、log.Println 等。

1. 前台运行

go run main.go > app.log 2>&1
  • >:标准输出
  • 2>&1:错误也写进同一文件

2. 后台运行

nohup go run main.go > app.log 2>&1 &

或编译后:

nohup ./myapp > app.log 2>&1 &

导出完成,日志在 app.log。


二、使用 systemd 管理服务(推荐)

如果你在 Debian 上用 systemd 运行 Go 程序:

1. 查看日志

journalctl -u your-service.service

2. 导出日志到文件

journalctl -u your-service.service > app.log

3. 实时导出

journalctl -u your-service.service -f >> app.log

三、Go 使用日志文件(代码中写文件)

例如:

log.SetOutput(os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644))

导出方式

直接复制文件即可:

cp app.log /tmp/app_backup.log

四、使用第三方日志库(logrus / zap)

logrus 示例

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp.log",
    MaxSize:    10,
    MaxBackups: 3,
    MaxAge:     28,
})

导出:

cp /var/log/myapp.log /tmp/

五、Docker 中运行的 Go 程序(Debian 容器)

docker logs container_name > app.log 2>&1

六、实用建议

  • 生产环境:用 systemd + journald
  • 日志量大:配合 logrotate
  • 集中管理:可接 rsyslog / filebeat / loki

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

  • Go 程序怎么运行的(systemd / docker / 手动)
  • 用的是什么日志库
  • 想实时导出还是定时备份

我可以给你更精确的命令。

0 踩