发布于2026-07-13 阅读(0)
扫一扫,手机访问
在CentOS上排查Golang应用的日志,其实没有固定的“万能钥匙”——关键要看应用是怎么输出日志的。是写到了文件里,还是直接扔给了标准输出/错误?是通过systemd跑的,还是装在Docker容器里?下面针对几种常见场景,把对应的查看方法拆开来说。

如果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。
生产环境下很多应用都是当作systemd服务来管理的(服务文件在/etc/systemd/system/yourapp.service)。这种情况下,需要先在服务文件里配置日志重定向:
[Service]段追加配置,把标准输出和错误追加到指定文件:StandardOutput=append:/var/log/yourapp.logStandardError=append:/var/log/yourapp.log或者更“干净”一点,直接交给systemd的日志系统(不用手动指定文件):StandardOutput=syslogStandardError=syslogSyslogIdentifier=my-golang-appsudo systemctl daemon-reloadsudo systemctl restart yourappjournalctl:sudo journalctl -u yourapp -f # -u指定服务名,-f实时刷新还可以加上时间过滤(比如--since "2025-10-01")或者关键字过滤(比如-g "panic"),非常灵活。如果应用是跑在Docker容器里的,那就不能直接在宿主机上找文件了,得通过容器来查:
docker psdocker logs -f <容器ID或名称>(按Ctrl+C停止)docker logs --tail 100 <容器ID或名称>这个命令会把容器内标准输出/错误的内容拉出来,前提是应用把日志写到了stdout/stderr(Golang推荐的做法之一)。
一旦你的服务上了规模,或者系统是分布式的,单机用tail、grep就有点力不从心了。这个时候,ELK Stack(Elasticsearch+Logstash+Kibana)或者Fluentd这类工具就是标配。思路很简单:在应用中把日志输出到工具采集的端点(比如Logstash的TCP/UDP端口),然后由工具统一收集、索引、搜索和可视化。一台机器上查日志的时代就过去了,你会爱上Kibana的搜索栏的。
os.OpenFile是不是成功了?路径权限对不对?日志配置有没有生效?logrotate是Linux必备,Golang也有第三方库比如lumberjack支持在代码里直接轮转)。别让一个日志文件撑爆磁盘。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8