我在heroku上有个小应用。每当我想要查看日志时,我就转到命令行并执行
heroku logs
它只显示了大约100行。是不是没有办法在heroku上查看我们应用程序的完整日志?
我在heroku上有个小应用。每当我想要查看日志时,我就转到命令行并执行
heroku logs
它只显示了大约100行。是不是没有办法在heroku上查看我们应用程序的完整日志?
当前回答
Heroku将日志视为有时间顺序的事件流。由于各种原因,不建议在这样的环境中访问文件系统上的*.log文件。
首先,如果你的应用程序有多个dyno,那么每个日志文件只代表了应用程序事件的部分视图。你必须手动聚合所有文件来获得完整的视图。
其次,Heroku上的文件系统是短暂的,这意味着无论何时您的dyno被重新启动或移动(大约每天发生一次),日志文件都会丢失。所以你最多只能看到一个动态日志的一天。
最后,在Cedar stack上运行heroku控制台甚至heroku run bash不会将您连接到当前运行的dyno。它会为bash命令生成一个新的命令。这被称为一次性过程。因此,您将无法在为heroku运行而生成的dynos上找到运行实际http进程的其他dynos的日志文件。
日志记录和可见性是Heroku的头等大事,有几个工具可以解决这些问题。首先,要查看跨所有dynos和应用程序/堆栈的所有层的应用程序事件的实时流,请使用heroku logs -t命令跟踪输出到您的终端。
$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
这对于现在观察应用程序的行为非常有用。如果您想要长时间存储日志,您可以使用提供日志保留、警报和触发器的众多日志附加组件之一。
最后,如果你想自己存储日志文件,你可以设置自己的syslog引流来接收来自Heroku的事件流,然后自己进行后期处理/分析。
总结:不要使用heroku控制台或heroku run bash查看静态日志文件。使用Heroku日志或日志附加组件将Heroku的日志事件流导入应用程序。
其他回答
更新(感谢dawmail333):
heroku logs -n 1500
或者,活生生地跟踪这些原木
heroku logs -t
Heroku日志文档
如果你需要超过几千行,你可以使用heroku的Syslog排水
或者(旧方法):
$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
另请参阅单独的流/过滤器。
例如,只跟踪您的应用程序日志
heroku logs --source app -t
或者只查看路由器日志
heroku logs --ps router
或者把它们串在一起
heroku logs --source app --ps worker
太好了. .
你需要使用-t或——tail选项,你需要定义你的heroku应用程序名称。
heroku logs -t --app app_name
我建议使用一个插件,我使用Logentries。要使用它,在命令行中运行:
Heroku插件:create logentries:le_tryit
(该命令创建一个免费帐户的插件,但显然你可以升级,如果你想)
Logentries允许您每月保存高达5GB的日志卷。这些信息可以通过他们在过去7天内的命令搜索来搜索,并且有实时警报。
所以回答你的问题,通过使用这个插件,你可以确保你的日志不会再丢失,当你达到1500行,Heroku保存默认情况下。 希望这能有所帮助!祝你有愉快的一天!
Heroku将日志视为有时间顺序的事件流。由于各种原因,不建议在这样的环境中访问文件系统上的*.log文件。
首先,如果你的应用程序有多个dyno,那么每个日志文件只代表了应用程序事件的部分视图。你必须手动聚合所有文件来获得完整的视图。
其次,Heroku上的文件系统是短暂的,这意味着无论何时您的dyno被重新启动或移动(大约每天发生一次),日志文件都会丢失。所以你最多只能看到一个动态日志的一天。
最后,在Cedar stack上运行heroku控制台甚至heroku run bash不会将您连接到当前运行的dyno。它会为bash命令生成一个新的命令。这被称为一次性过程。因此,您将无法在为heroku运行而生成的dynos上找到运行实际http进程的其他dynos的日志文件。
日志记录和可见性是Heroku的头等大事,有几个工具可以解决这些问题。首先,要查看跨所有dynos和应用程序/堆栈的所有层的应用程序事件的实时流,请使用heroku logs -t命令跟踪输出到您的终端。
$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
这对于现在观察应用程序的行为非常有用。如果您想要长时间存储日志,您可以使用提供日志保留、警报和触发器的众多日志附加组件之一。
最后,如果你想自己存储日志文件,你可以设置自己的syslog引流来接收来自Heroku的事件流,然后自己进行后期处理/分析。
总结:不要使用heroku控制台或heroku run bash查看静态日志文件。使用Heroku日志或日志附加组件将Heroku的日志事件流导入应用程序。