如何在CentOS系统上查看Golang日志
在CentOS环境中排查Golang应用的日志,并没有唯一的“万能解法”——关键在于应用的日志输出方式:是写入文件,还是输出到标准输出/错误?是通过systemd服务管理,还是运行在Docker容器内?下面针对几种常见场景,分别介绍对应的查看方法。

1. 直接查看日志文件(最常用方法)
如果Golang应用通过log.SetOutput()将日志写入文件(例如app.log),操作非常简单:
- 查看完整内容:
cat /path/to/app.log(请替换为实际日志文件路径) - 实时追踪新日志:
tail -f /path/to/app.log,按Ctrl+C停止 - 分页浏览:
less /path/to/app.log,按q退出 - 过滤错误信息:
grep "ERROR" /path/to/app.log,仅显示包含“ERROR”的行
注意一个小陷阱:如果应用代码中没有显式指定日志路径,日志可能默认输出到应用的工作目录。可以通过os.Getwd()在代码中获取当前目录,或使用全局搜索命令:find / -name "*.log" 2>/dev/null。
2. 通过systemd服务查看(生产环境推荐)
生产环境下,很多应用以systemd服务方式运行(服务文件位于/etc/systemd/system/yourapp.service)。此时需要在服务文件中配置日志重定向:
- 在
[Service]段添加配置,将标准输出和错误重定向到指定文件:
或者更简洁的方式:直接交给systemd的日志系统,无需手动指定文件:StandardOutput=append:/var/log/yourapp.logStandardError=append:/var/log/yourapp.logStandardOutput=syslogStandardError=syslogSyslogIdentifier=my-golang-app - 修改配置后,需重载并重启服务:
sudo systemctl daemon-reloadsudo systemctl restart yourapp - 查看日志使用
journalctl:
还可以添加时间过滤(如sudo journalctl -u yourapp -f # -u指定服务名,-f实时刷新--since "2025-10-01")或关键字过滤(如-g "panic"),非常灵活。
3. 查看Docker容器中的日志(如果应用运行在容器中)
如果应用运行在Docker容器中,无法直接在宿主机上查找文件,需要通过容器查看:
- 先获取容器ID或名称:
docker ps - 实时查看日志:
docker logs -f <容器ID或名称>(按Ctrl+C停止) - 仅查看最后100行:
docker logs --tail 100 <容器ID或名称>
该命令会拉取容器内标准输出/错误的内容,前提是应用将日志写入stdout/stderr(这是Golang推荐的做法之一)。
4. 使用日志收集工具(适用于大规模生产环境)
一旦服务规模扩大或系统为分布式,单机使用tail、grep将力不从心。此时ELK Stack(Elasticsearch+Logstash+Kibana)或Fluentd等工具成为标配。思路:在应用中输出日志到工具采集端点(如Logstash的TCP/UDP端口),由工具统一收集、索引、搜索和可视化。从此告别单机查日志,Kibana的搜索栏将成为你的得力助手。
注意事项
- 如果始终找不到日志,请首先检查应用代码:
os.OpenFile是否成功执行?路径权限是否正确?日志配置是否生效? - 生产环境中,日志文件可能迅速增长至数GB甚至数十GB,务必实施日志轮转(
logrotate是Linux必备工具,Golang也提供第三方库如lumberjack支持代码内直接轮转)。切勿让单个日志文件撑爆磁盘。
