温馨提示×

怎么查看Golang运行日志

小樊
35
2026-07-13 01:00:04
栏目: 编程语言

在 Golang 中,“运行日志”要看日志是写到哪里的。下面按常见场景给你一个完整说明。


一、最常见的:程序自己打的日志

1️⃣ 使用标准库 log

import "log"

log.Println("hello")
log.Printf("value=%d", 123)

默认输出位置:

  • 标准错误(stderr)
  • 通常就是:
    • 终端
    • 容器日志
    • systemd journal
    • 被重定向的文件

查看方式:

# 前台运行
go run main.go

# 后台运行
./main 2>&1 | tee app.log

二、日志输出到文件

2️⃣ 日志写到文件(最常见)

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

查看:

tail -f app.log

三、使用第三方日志库

3️⃣ logrus

log.Info("start")
log.Errorf("error: %v", err)

查看方式:

  • 和上面一样
  • 如果是 JSON 日志:
cat app.log | jq

4️⃣ zap

logger.Info("hello")

通常输出到:

  • stdout / stderr
  • 文件
  • 或同时输出

四、运行在服务器 / 容器里

5️⃣ Linux 后台进程

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

查看:

tail -f app.log

6️⃣ systemd 服务

journalctl -u your-service-name -f

7️⃣ Docker 容器

docker logs -f 容器ID

如果日志被重定向到文件:

docker exec -it 容器ID cat /app/app.log

五、Panic / 崩溃日志

8️⃣ panic 输出位置

  • stderr
  • 包含 goroutine 堆栈

查看:

./main 2> panic.log

或容器:

docker logs 容器ID

六、运行时信息(不是业务日志)

9️⃣ GC / 调度 / 内存

GODEBUG=gctrace=1 ./main

输出:

  • GC 频率
  • 内存回收情况

七、快速排查建议(实战)

✅ 先看程序有没有输出:

ps aux | grep main

✅ 看 stdout / stderr:

lsof -p PID

✅ 搜索日志文件:

find / -name "*.log" 2>/dev/null

八、建议你这样做(最佳实践)

✔ 统一日志输出到 stdout + stderr
✔ 用 Docker / systemd / 日志采集系统接管
✔ 不要自己管理日志文件(除非必要)


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

  • ✅ 是否用 Docker
  • ✅ 是否用 systemd
  • ✅ 用的什么日志库
  • ✅ 是“看不到日志”还是“想找 panic 日志”

我可以给你针对你环境的精确查看方式

0