在 CentOS 上查 Golang 应用日志,最容易卡住的地方不是命令不会用,而是一开始就找错了入口。Go 程序可能把日志写到文件,也可能交给 systemd、直接打到标准输出,或者完全运行在 Docker 容器里;部署方式不同,排查路径也完全不同。下面按实际场景逐项展开,帮助你先判断日志在哪,再选择对应命令,并顺手避开权限、日志路径和日志轮转这些常见坑。
先判断 Go 应用是怎么运行的
排查前先确认应用的启动方式,这一步能决定你后面该用 tail、journalctl 还是 docker logs。
- 如果程序把日志写到了固定文件,比如
/var/log/myapp.log,优先直接查文件; - 如果程序由
systemd托管,例如my-golang-app.service,优先使用journalctl; - 如果程序是直接在终端里跑的,没有做重定向,就只能从当前终端输出或进程关联信息入手;
- 如果程序部署在容器里,通常从
docker logs开始排查。
这一步看起来简单,但能避免一上来就在系统里盲目搜文件路径。
日志写入文件时怎么查
如果你的 Golang 应用已经把日志输出到指定文件,那么直接查文件通常是最高效的方式。常用组合就是 tail、grep 和 awk。
实时看新增日志
tail -f /path/to/your/app.log
这个命令适合盯实时输出,按 Ctrl+C 退出。
查看最后 N 行
tail -n 100 /path/to/your/app.log
排查刚发生的问题时,先看最后 100 行通常比全量翻文件更有效。
按日期或时间段筛选
grep '2025-09-26' /path/to/your/app.log | awk '{print $1, $2, $3}'
如果日志本身带日期字段,可以先用 grep 筛出目标日期,再用 awk 抽取关键列。这里的 {print $1, $2, $3} 只是示例,具体字段数需要按你的日志格式调整。
systemd 托管服务怎么查
很多 Go 应用在 CentOS 上都作为系统服务运行,这类场景不一定会把日志落到你熟悉的文件路径,直接用 journalctl 往往更省事。

实时跟踪服务日志
journalctl -u my-golang-app.service -f
适合线上观察服务行为,尤其是重启、发布或问题复现阶段。
查看指定时间范围
journalctl -u my-golang-app.service --since "2025-09-26" --until "2025-09-27"
当你已经知道故障大概发生在哪一天,这种按时间截取的方式会比全量输出更容易定位。
按关键字过滤错误
journalctl -u my-golang-app.service | grep 'error'
如果只想先抓异常信息,可以把 journalctl 输出继续交给 grep 过滤,例如定位包含 error 的日志行。
直接前台运行的程序怎么处理标准输出
如果 Go 应用不是作为服务启动,也没有把日志重定向到文件,那么日志一般只会出现在当前终端。这种方式临时调试方便,但不适合长期排查历史问题。
进程还在运行时
ps aux | grep your_go_app
先找到进程 ID(PID),再尝试查看与该进程相关的日志信息。原始用法里提到:
journalctl -p -f
不过这里的 -p 参数在实际环境中未必符合预期,更常见的写法是:
journalctl _PID=
如果系统没有接管这部分输出,那么能查到的信息也会有限。
进程结束后怎么办
如果进程已经退出,而你又没有提前做日志重定向,那么标准输出和标准错误大概率就无法回看了。更稳妥的做法,是从一开始就把输出收进文件:
./your_app > app.log 2>&1
这样以后无论是用 tail 还是配合脚本分析,都会轻松很多。
Docker 容器里的 Go 日志怎么查
如果 Go 应用跑在容器里,日志入口通常不在宿主机文件,而是容器标准输出。此时 docker logs 是默认工具。

实时查看容器日志
docker logs -f
只看最后 100 行
docker logs --tail 100
按关键字筛选
docker logs | grep 'warning'
这类命令适合快速确认最近是否出现了告警、超时或连接失败等问题。
几个容易忽略但很关键的注意事项
权限不够时记得加 sudo
如果日志文件或 systemd 服务由 root 创建,普通用户直接查看可能会失败。这时记得补上 sudo,例如:

sudo journalctl -u my-golang-app.service
不知道日志文件在哪时怎么找
日志路径不明确时,可以从两个方向入手:
- 先看代码或配置,确认日志库的输出位置,例如
logrus的Filename; - 再结合进程句柄查实际打开的日志文件:
lsof -p | grep log
长期运行服务别忘了做日志轮转
日志能查只是第一步,日志能持续、安全地写下去同样重要。长期运行的 Go 应用如果不做轮转,文件会越来越大,最终可能把磁盘写满。
常见做法有两种:
- 在代码里使用
lumberjack这类库做日志切割; - 使用系统自带的
logrotate管理日志文件。
对线上服务来说,这通常不是优化项,而是基础配置。







