在 Debian 上查 Golang 程序日志,要看你的程序日志输出到哪里。下面按常见情况给你一个排查清单。
很多 Go 程序直接:
log.Println("xxx")
fmt.Println("xxx")
这类日志不会自动写文件,而是:
# 查看服务日志
journalctl -u your-service-name -f
# 查看最近 100 行
journalctl -u your-service-name -n 100
# 指定时间
journalctl -u your-service-name --since "2025-01-01" --until "2025-01-02"
如果不知道服务名:
systemctl list-units --type=service
例如:
log.SetOutput(os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644))
tail -f /var/log/myapp.log
less /var/log/myapp.log
grep ERROR /var/log/myapp.log
这些库通常:
/var/log/
/var/log/app/
/tmp/
./logs/
搜一下:
find / -name "*.log" 2>/dev/null | grep -v proc
或:
lsof -p <pid> | grep log
journalctl -xe
查某个进程:
ps aux | grep your-program
journalctl _PID=<pid>
/var/log/syslog
/var/log/messages
查看:
tail -f /var/log/syslog
grep go /var/log/syslog
docker logs <container-id> -f
或:
docker inspect <container-id> | grep LogPath
# 1. 找到进程
ps aux | grep your-app
# 2. 看是不是 systemd
systemctl status your-app
# 3. 看 journal
journalctl -u your-app -f
# 4. 看有没有日志文件
ls /var/log/
# 5. 实在找不到
strace -p <pid> -e write
| 情况 | 原因 |
|---|---|
| 日志看不到 | 只输出到 stdout,没写文件 |
| 日志为空 | 日志被 buffer,没 flush |
| 权限问题 | /var/log 没写权限 |
| Docker | 日志在容器里 |
你可以直接贴:
我可以一步一步帮你定位到具体日志文件 ✅