heroku - 如何查看所有日志

jos*_*osh 452 logging heroku

我在heroku上有一个小应用程序.每当我想看日志时,我都会去命令行做

heroku logs
Run Code Online (Sandbox Code Playgroud)

这只能让我看到大约100行.有没有办法在heroku上查看我们的应用程序的完整日志?

gle*_*ebm 756

更新(感谢dawmail333):

heroku logs -n 1500
Run Code Online (Sandbox Code Playgroud)

或者,将日志拖到现场

heroku logs -t 
Run Code Online (Sandbox Code Playgroud)

Heroku日志文档

如果你需要超过几千行,你可以使用heroku的Syslog Drains

或者(旧方法):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
Run Code Online (Sandbox Code Playgroud)

  • 现在这不适用于雪松堆栈.有没有人找到新的选择? (5认同)
  • 只需使用`heroku logs -n 1500`,这是Cedar上最好的方法.如果您需要更多行,则需要系统日志消耗:https://devcenter.heroku.com/articles/logging#syslog_drains (2认同)
  • 对于旧方法,为什么要运行rails控制台而不仅仅是`heroku run cat log/production.log`? (2认同)

nes*_*sur 138

heroku中的日志记录有很大改进!

$ heroku logs -n 500
Run Code Online (Sandbox Code Playgroud)

更好!

$ heroku logs --tail
Run Code Online (Sandbox Code Playgroud)

参考:http://devcenter.heroku.com/articles/logging

更新

这些不再是附加组件,而是默认功能的一部分:)

  • 此外,-n可以达到1500,我认为Heroku只是切断了之后的任何东西. (4认同)

Rya*_*gle 51

Heroku将日志视为按时间排序的事件流.*.log出于各种原因,不建议在此类环境中访问文件系统上的文件.

首先,如果您的应用有多个dyno,则每个日志文件仅代表您应用事件的部分视图.您必须手动聚合所有文件才能获得完整视图.

其次,Heroku上的文件系统是短暂的意思,无论何时重启或移动dyno(大约每天一次)日志文件都会丢失.因此,您最多只能获得一天的单个dyno日志.

最后,在Cedar堆栈上运行heroku console甚至heroku run bash没有将您连接到当前正在运行的dyno.它专门为bash命令生成一个新的.这称为一次性过程.因此,您将找不到正在运行实际http进程的其他dynos的日志文件heroku run.

一般来说,记录和可见性是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 ...
Run Code Online (Sandbox Code Playgroud)

这对于立即观察应用程序的行为非常有用.如果要将日志存储更长时间,可以使用提供日志保留,警报和触发器的众多日志记录加载项之一.

最后,如果您想自己存储日志文件,可以设置自己的系统日志,以接收来自Heroku的事件流并自行进行后处理/分析.

摘要:不要使用heroku consoleheroku run bash查看静态日志文件.使用heroku logs或记录加载项管理Heroku的应用程序日志事件流.


Sha*_*der 23

另请参阅各个流/过滤器.

例如,仅尾随您的应用程序日志

heroku logs --source app -t
Run Code Online (Sandbox Code Playgroud)

或者只查看路由器日志

heroku logs --ps router
Run Code Online (Sandbox Code Playgroud)

或者把它们连在一起

heroku logs --source app --ps worker
Run Code Online (Sandbox Code Playgroud)

超好的..

  • 要查看我的应用程序的日志,我会这样做:`heroku logs --ps web.1`(带1 dyno) (4认同)

Ani*_*ari 19

以上答案非常有用,它将帮助您从命令行查看.而如果你想要,所以你必须登录到您的Heroku帐户,然后选择您的应用程序,最后点击查看日志,以从GUI做

图像视图

  • 此方法仅显示发生时的日志输出,从您单击“查看日志”选项开始。因此,除非您只想在不进入控制台的情况下跟踪日志,否则它没有用。 (3认同)
  • 没有任何选项可以查看此 UI 本身的所有日志吗? (3认同)

小智 14

关注heroku日志记录

要查看您的日志,我们有:

  1. logs命令默认情况下会恢复100个日志行.

heroku日志

  1. 显示最多1500行, - num(或-n)选项.

heroku日志-n 200

  1. 实时显示日志

heroku logs --tail

  1. 如果你在heroku上有很多应用程序

heroku logs --app your_app_name


ndr*_*x42 9

heroku logs -t 向我们展示了实时日志.


Ben*_*uer 8

您可以使用Heroku的命令行界面(CLI使用)访问您的日志文件.

如果安装了Heroku的CLI并且您知道了应用程序名称(例如https://myapp.herokuapp.com/),则可以运行以下命令:

heroku logs --tail --app=myapp
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下方法访问实时流中的日志:

heroku logs --source app --tail --app=myapp
Run Code Online (Sandbox Code Playgroud)

如果日志告诉你这样的事情:

错误的ERR!可以在以下位置找到此运行的完整日志:

错误的ERR!/app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

然后你也可以通过Heroku CLI使用bash终端访问它们:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
Run Code Online (Sandbox Code Playgroud)


小智 8

我的解决方案是在应用程序第一次启动时获取完整的日志,例如:

heroku logs -n 1500 > log
Run Code Online (Sandbox Code Playgroud)

然后添加fgrep -vf以使其保持最新,例如:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
Run Code Online (Sandbox Code Playgroud)

对于连续记录,只需每隔 x 分钟(或秒)使用 watch 对其进行迭代。


cle*_*lem 7

可能值得将免费的Papertrail计划添加到您的应用程序中.零配置,您可以获得7天的日志数据,最高可达10MB /天,并可以搜索2天的日志.


Pet*_*ota 6

您需要使用-t--tail选项,并且需要定义您的heroku 应用程序名称。

heroku logs -t --app app_name
Run Code Online (Sandbox Code Playgroud)