温馨提示×

linux下golang日志怎么读

小樊
43
2026-10-02 14:06:56
栏目: 编程语言

在 Linux 下阅读 Golang 程序产生的日志,通常取决于日志写到了哪里以及用了什么日志库。下面按常见情况给你一个实用指南。


一、先确认日志写在哪里

1. 标准输出 / 标准错误(最常见)

很多 Golang 服务(尤其是 Docker / Kubernetes 中)直接用:

log.Println("hello")
fmt.Println("info")

这些日志会输出到:

  • 终端
  • systemd journal
  • 容器日志(docker / k8s)

查看方式

# 直接运行程序
./app

# systemd 服务
journalctl -u your-service -f

# Docker
docker logs -f container_id

# Kubernetes
kubectl logs -f pod-name

2. 日志写到文件

例如:

log.SetOutput(os.OpenFile("/var/log/app.log", ...))

或常用库:

  • logrus
  • zap
  • slog

查看文件日志

tail -f /var/log/app.log
less /var/log/app.log
grep ERROR /var/log/app.log

二、按日志库来看怎么读

1. 标准库 log

格式简单:

2026/01/15 10:20:30 something happened

读取:

tail -n 100 /var/log/app.log
grep "ERROR" /var/log/app.log

2. logrus

常见 JSON 或文本格式:

{"level":"error","msg":"db failed","time":"2026-01-15T10:20:30Z"}

读取 JSON 日志:

cat app.log | jq '.'
grep '"level":"error"' app.log

3. zap

高性能,通常是 JSON:

{"level":"error","ts":1705314030,"msg":"timeout"}

查看:

tail -f zap.log | jq

4. slog(Go 1.21+)

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

配合 systemd

journalctl -u app.service -S "2026-01-15 10:00" -U "2026-01-15 11:00"

四、如果是别人写的服务,不知道日志在哪?

1. 看进程

ps aux | grep app

2. 看打开了哪些文件

lsof -p <pid>

3. 看 systemd 配置

systemctl cat app.service

五、推荐做法(经验)

  • 生产环境:日志写文件 + 用 journald / 日志采集(filebeat / loki)
  • 本地开发:tail -f 最方便
  • 日志格式:用 JSON,方便 grep / jq / 日志系统解析

如果你愿意,可以把:

  • 你的 Golang 日志代码片段
  • 或 服务运行方式(systemd / docker / 直接跑)

发出来,我可以直接告诉你具体该用哪条命令读日志。

0 踩