在 Linux 下阅读 Golang 程序产生的日志,通常取决于日志写到了哪里以及用了什么日志库。下面按常见情况给你一个实用指南。
很多 Golang 服务(尤其是 Docker / Kubernetes 中)直接用:
log.Println("hello")
fmt.Println("info")
这些日志会输出到:
# 直接运行程序
./app
# systemd 服务
journalctl -u your-service -f
# Docker
docker logs -f container_id
# Kubernetes
kubectl logs -f pod-name
例如:
log.SetOutput(os.OpenFile("/var/log/app.log", ...))
或常用库:
logruszapslogtail -f /var/log/app.log
less /var/log/app.log
grep ERROR /var/log/app.log
log格式简单:
2026/01/15 10:20:30 something happened
读取:
tail -n 100 /var/log/app.log
grep "ERROR" /var/log/app.log
常见 JSON 或文本格式:
{"level":"error","msg":"db failed","time":"2026-01-15T10:20:30Z"}
读取 JSON 日志:
cat app.log | jq '.'
grep '"level":"error"' app.log
高性能,通常是 JSON:
{"level":"error","ts":1705314030,"msg":"timeout"}
查看:
tail -f zap.log | jq
logger.Info("start", "port", 8080)
输出示例:
time=2026-01-15T10:20:30.000+00:00 level=INFO msg=start port=8080
tail -f app.log
tail -f app.log | grep -i error
sed -n '/10:20/,/10:30/p' app.log
journalctl -u app.service -S "2026-01-15 10:00" -U "2026-01-15 11:00"
ps aux | grep app
lsof -p <pid>
systemctl cat app.service
tail -f 最方便如果你愿意,可以把:
发出来,我可以直接告诉你具体该用哪条命令读日志。