在 Debian 下查看 Golang 程序的日志,取决于日志写在哪里。下面按常见场景给你一个比较完整的排查思路。
很多 Golang 程序直接写到:
fmt.Printlnlog.Printlnos.Stdout / os.Stderr对应位置:
journalctl -u 服务名
实时查看:
journalctl -u 服务名 -f
示例:
journalctl -u mygoapp -f
journalctl -u mygoapp --since today
如果你的程序类似这样:
logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
cat /var/log/myapp.log
tail -f /var/log/myapp.log
less /var/log/myapp.log
⚠️ 注意权限:
sudo tail -f /var/log/myapp.log
docker logs 容器名
docker logs -f 容器名
如果用了 docker-compose:
docker-compose logs -f
ps aux | grep your_program
ls -l /proc/进程PID/fd
find /var/log -name "*.log" 2>/dev/null
使用成熟日志库:
log/slog(Go 1.21+ 推荐)logruszap示例(slog 写文件 + stdout):
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
logger.Info("hello debian")
| 场景 | 查看方式 |
|---|---|
| systemd | journalctl -u 服务名 |
| 前台运行 | 终端输出 |
| 日志文件 | /var/log/*.log |
| Docker | docker logs |
| 不确定 | ps + /proc/PID/fd |
如果你愿意,可以把:
发出来,我可以帮你精确定位日志位置。