温馨提示×

debian golang日志怎么导出

小樊
36
2026-09-25 11:02:49
栏目: 编程语言

在 Debian 上运行 Golang 程序时,“日志怎么导出”通常有以下几种场景。下面按常见用法给你说明。


一、Golang 程序自身输出日志

1. 使用标准库 log

package main

import (
    "log"
    "os"
)

func main() {
    log.SetOutput(os.Stdout)
    log.Println("hello log")
}

运行:

go run main.go

二、在 Debian 上“导出”日志的几种方式

方式 1:重定向到文件(最简单)

./your_program > app.log 2>&1
  • >:标准输出
  • 2>&1:错误输出也写入

后台运行:

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

方式 2:使用 systemd(推荐,生产环境)

1. 编写 service 文件

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

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=www-data
Restart=always

[Install]
WantedBy=multi-user.target

2. 启动

systemctl daemon-reload
systemctl start myapp
systemctl enable myapp

3. 查看日志

journalctl -u myapp -f

导出日志:

journalctl -u myapp > myapp.log

方式 3:使用 log 文件 + logrotate

程序写文件:

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

logrotate 配置:

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

方式 4:结构化日志(推荐)

使用 zap / logrus:

import "github.com/sirupsen/logrus"

func main() {
    logrus.SetFormatter(&logrus.JSONFormatter{})
    logrus.WithField("module", "main").Info("start")
}

可配合:

  • filebeat
  • loki
  • ELK

三、常见问题

Q:Debian 日志在哪里?

  • systemd:journalctl
  • 自定义:/var/log/xxx.log

Q:程序崩溃没日志?

确保:

  • 错误输出 stderr 被捕获
  • systemd 中不要丢弃日志

如果你能说明:

  • 是 开发环境还是服务器
  • 是否用 systemd
  • 想导出到 文件 / 远程 / 审计

我可以给你更精确的方案。

0 踩