日志
(一)日志类型
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 [email protected] 2012-08-30T06:49:05+00:00 heroku[api]: Release v54 created by [email protected] ...
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功能。 这个方法可能更便宜,但要求你设置和管理自己的日志服务器。如果你想这样做,请阅读他们的官方文档。