Heroku黑客指南(十二)

日志

(一)日志类型

Heroku有三种主要类型的日志:

  • 应用日志 – 你的应用的标准输出和错误日志
  • 系统日志 – heroku自身的系统日志,包括路由日志、错误页面、dyno重启等
  • API日志 – 包含heroku应用的metadata,例如代码部署、dyno扩容等

(二)查看日志

最简单的查看日志方法是运行heroku logs命令,它展示所有近来的日志。

$ heroku logs
2012-08-30T06:49:09+00:00 heroku[web.1]: State changed from starting to up
2012-08-30T06:49:10+00:00 app[web.1]: 2012-08-30 06:49:10 [2] [INFO] Handling signal: term
... lots of output...

上述每个日志行都有相同的组件:

  • 时间戳
  • 日志类型(例如app[web.1], heroku[router]等)
  • 日志内容

实时查看日志,运行:

$ heroku logs --tail

–tail参数就像Unix的tail命令,将日志更新的内容实时发送到终端。不过这个命令的信息量太大,还可以更有效的查看指定类型的日志。

(三)查看指定日志

查看指定的日志,可以加上–source参数。例如,你想查看heroku类型的系统日志(路由请求、dyno重启等),可以运行:

$ heroku logs --tail --source heroku
2012-08-30T06:49:05+00:00 heroku[api]: Add scheduler:standard add-on by wind@blog.dnsbed.com
2012-08-30T06:49:05+00:00 heroku[api]: Release v54 created by wind@blog.dnsbed.com
...

source包含三种:app, heroku, api.

甚至你还可以查询指定进程的日志,例如:

$ heroku logs --ps web.1 # 查询第一个web dyno的日志
$ heroku logs --ps scheduler.1 # 查询第一个scheduler dyno的日志
$ heroku logs --ps postgres # 查询postgresql的日志

上述方式对于通过日志诊断特定的问题无疑更有效。

(四)何时查日志

对于开发人员,假如开发的应用遇到问题,首先想到的是查日志。比如我在将新代码部署到heroku时,会始终关注web dyno的日志,以确认应用运行是否正常。执行如下命令:

$ heroku logs --tail --ps web

通用原则是,代码未动,日志先行。不管是代码部署前,还是部署后,都应该关注日志输出。这有助于快速定位问题,以及迅速解决问题。

(五)日志存储选择

对某些用户来说,通过heroku的命令行查看日志可能不那么方便。当前有两个选择,可以让用户长期保存日志,以便进行查找。

第一个选择是使用日志插件,当前有3个竞争的heroku日志插件,它们都很优秀。

上述插件都可以让你存储并查找日志。

第二个选择是将日志输出到远程的日志服务器,利用heroku的syslog drain功能。 这个方法可能更便宜,但要求你设置和管理自己的日志服务器。如果你想这样做,请阅读他们的官方文档

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。