在CentOS上排查Golang应用日志,说复杂也复杂,说简单也简单。关键在于你清楚自己的应用是怎么跑起来的——是直接写文件?还是通过systemd管理?或者干脆扔在Docker里?不同的部署方式,对应不同的日志查看姿势。下面把几种常见场景拆开说,基本覆盖了绝大多数情况。
1. 直接查看日志文件(适用于自定义路径的日志文件)
如果你的Golang应用把日志输出到了指定文件,比如/var/log/myapp.log,那最直接的办法就是上tail和grep。日常排查时,这两个命令组合几乎能解决80%的问题。

- 实时查看新增日志:
tail -f /path/to/your/app.log,按Ctrl+C退出; - 想查某个时间段的日志?用
grep配合awk。比如只看2025-09-26这一天的:grep '2025-09-26' /path/to/your/app.log | awk '{print $1, $2, $3}'(具体字段数根据日志格式调整); - 只看最后N行,比如最后100行:
tail -n 100 /path/to/your/app.log。
2. 通过systemd服务查看日志(适用于以systemd管理的应用)
现在很多Go应用都通过systemd托管,比如my-golang-app.service。这种情况下,journalctl是你的好帮手,不用去翻文件路径。
- 实时看服务日志:
journalctl -u my-golang-app.service -f; - 想看指定时间范围的日志,比如从2025-09-26到2025-09-27:
journalctl -u my-golang-app.service --since "2025-09-26" --until "2025-09-27"; - 过滤关键字,比如只显示包含“error”的行:
journalctl -u my-golang-app.service | grep 'error'。
3. 查看标准输出/错误(适用于直接运行的应用)
如果你的Go应用直接在终端里跑(没有重定向日志),那输出会直接打印在当前终端上。但问题是,历史输出怎么查?
- 如果进程还在运行,先用
ps aux | grep your_go_app找到进程ID(PID),然后通过journalctl -p查看(注意:这里-f -p参数可能需根据实际情况调整,更常见的是用journalctl _PID=); - 如果进程已经结束了,那标准输出/错误基本就丢了。所以建议从一开始就把日志重定向到文件:
./your_app > app.log 2>&1,这样以后查起来方便得多。
4. 使用Docker容器查看日志(适用于容器化部署的应用)
容器化部署越来越普遍,这时候docker logs就是标配工具。
- 实时查看容器日志:
docker logs -f; - 只看最后100行:
docker logs --tail 100; - 筛选关键字,比如找出所有“warning”:
docker logs。| grep 'warning'
注意事项
- 权限问题:如果日志文件或systemd服务是root用户创建的,记得加
sudo,比如sudo journalctl -u my-golang-app.service; - 日志路径确认:万一不知道日志文件在哪,有两种办法:一是看代码中日志库的配置(比如
logrus的Filename),二是用lsof -p找到进程打开的文件句柄;| grep log - 日志轮转:长期运行的应用千万别忘了配置日志轮转。要么在代码里用
lumberjack这类库,要么用系统自带的logrotate工具,否则日志文件越滚越大,迟早把磁盘撑爆。