远程查看 Go 应用日志,一般有 “直接看服务器日志” 和 “集中式日志系统” 两大类方案,下面按常见场景给你一个实用指南。
如果 Go 程序把日志写到了文件:
ssh user@server
tail -f /var/log/myapp.log
常用命令:
tail -f app.log # 实时查看
less app.log # 分页查看
grep ERROR app.log # 查错误
✅ 适合:单台服务器、快速排查
很多 Go 程序用 log.Println / fmt.Println 输出日志:
# systemd
journalctl -u myapp -f
# docker
docker logs -f container_id
使用 log/slog(Go 1.21+):
package main
import (
"log/slog"
"os"
)
func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("server start", "port", 8080)
}
输出:
{"time":"2026-01-21T10:00:00","level":"INFO","msg":"server start","port":8080}
✅ 优点:
Go 日志 → 系统 syslog → 远程服务器
import "log/syslog"
log, _ := syslog.New(syslog.LOG_INFO, "myapp")
log.Info("hello")
适合:传统服务器环境
架构:
Go App → Filebeat → Elasticsearch → Kibana
✅ 优点:
架构:
Go App → Promtail → Loki → Grafana
特点:
docker logs -f <container>
kubectl logs -f pod-name
kubectl logs -f deployment/myapp
✅ 配合 Loki 最好用
http.HandleFunc("/logs", func(w http.ResponseWriter, r *http.Request) {
os.ReadFile("app.log", w)
})
⚠️ 注意权限和安全
delve 远程调试journalctlslog JSON 日志你可以告诉我:
我可以给你 一套完整可落地的远程日志方案。