Heroku -如何查看所有日志

我在heroku上有个小应用。每当我想要查看日志时,我就转到命令行并执行

heroku logs

它只显示了大约100行。是不是没有办法在heroku上查看我们应用程序的完整日志?

380532 次浏览

更新(感谢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!

$ heroku logs -n 500

更好!

$ heroku logs --tail

引用:# EYZ0

更新

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

有关雪松堆叠参见:

https://devcenter.heroku.com/articles/oneoff-admin-ps

你需要运行:

Heroku run bash…

Heroku将日志视为有时间顺序的事件流。由于各种原因,不建议在这样的环境中访问文件系统上的*.log文件。

首先,如果你的应用程序有多个dyno,那么每个日志文件只代表了应用程序事件的部分视图。你必须手动聚合所有文件来获得完整的视图。

其次,Heroku上的文件系统是短暂的,这意味着无论何时您的dyno被重新启动或移动(发生在一天一次左右),日志文件都会丢失。所以你最多只能看到一个动态日志的一天。

最后,在雪松堆栈上运行heroku console甚至heroku run bash不会将您连接到当前运行的dyno。它会为bash命令生成一个新的命令。这被称为一次性的过程。因此,您将无法在为heroku run生成的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 consoleheroku run bash来查看静态日志文件。使用heroku logs或日志附加组件将Heroku的日志事件流导入应用程序。

heroku logs -t显示了活动日志。

在你的应用中添加免费Papertrail计划之类的东西可能是值得的。零配置,你可以得到7天的日志数据,最高可达10MB/天,并且可以通过2天的日志进行搜索。

另请参阅单独的流/过滤器。

例如,只跟踪您的应用程序日志

heroku logs --source app -t

或者只查看路由器日志

heroku logs --ps router

或者把它们串在一起

heroku logs --source app --ps worker

太好了. .

跟随Heroku的日志

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

  1. Logs命令默认检索100行日志。

# EYZ0

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

# EYZ0

  1. 实时显示日志

# EYZ0

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

# EYZ0

好吧,上面的答案是非常有用的,它将帮助您从命令行查看。然而,如果你想从GUI检查,你必须登录到你的Heroku帐户,然后选择你的应用程序,最后点击查看日志image

要查看详细的日志,您需要在production.rb文件中放入两行:

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG

然后通过跑步

heroku logs -t

您可以查看详细的日志。

我更喜欢这样做

heroku logs --tail | tee -a herokuLogs

您可以让脚本在后台运行,并且可以随时按照您想要的方式从文本文件中过滤日志。

你可以使用Heroku的命令行访问你的日志文件 接口(# EYZ0)。< / p >

如果Heroku的命令行已经安装,并且你知道你的应用程序名称(比如https://myapp.herokuapp.com/),那么你可以运行以下命令:

heroku logs --tail --app=myapp

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

heroku logs --source app --tail --app=myapp

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

npm犯错!这个运行的完整日志可以在下面找到:

npm犯错!/ app / .npm / _logs / 2017 - 07 - 11 - t08_29_45_291z debug.log

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

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

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

heroku logs -n 1500 > log

然后添加fgrep -vf使它保持最新,像这样:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log

对于连续日志,只需每x分钟(或秒)使用watch迭代一次。

WAR文件:

我没有使用github,而是直接上传了一个WAR文件(我发现这更容易和更快)。

因此,以下几点帮助了我:

heroku logs --app appname

希望它能帮助到一些人。

我建议使用一个插件,我使用Logentries。要使用它,在命令行中运行:

# EYZ0

(该命令创建一个免费帐户的插件,但显然你可以升级,如果你想)

Logentries允许您每月保存高达5GB的日志卷。这些信息可以通过他们在过去7天内的命令搜索来搜索,并且有实时警报。

所以为了回答你的问题,通过使用这个插件,你可以确保你的日志不再丢失,当你达到1500行,Heroku保存默认情况下。 希望这能有所帮助!祝你有愉快的一天!< / p >

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

heroku logs -t --app app_name

heroku logs -t显示我们的活动日志。

. heroku logs -n 1500表示日志数量

但我仍然建议使用纸质记录插件,它有一定的好处,并有免费的基本计划。

可以使用 # EYZ0 < / p >

但这并不是一个推荐的方法(换句话说,并没有向您展示真实的情况)

我建议你插上一些日志工具。(sumoLogic,书面记录等)作为附加组件

它们都有一个免费版本(限制很少,但对于一个小的应用程序或开发环境足够了,这将提供很好的洞察力和工具来分析日志)

你需要有一些日志排水实现,应该排水你的日志,以查看所有的日志(管理历史日志以及):

  1. 第一个选项 - Splunk可以使用:你可以排出你所有的日志,像:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

And then login into your splunk server and search for any number of logs. I am using Splunk and this is working perfectly fine for me.

  1. Second option - You can purchase add on to your App, like given below: (I haven't used these options, however these are the available ones).

    • Timber.io
    • Sumo Logic
    • LogEnteries
    • Log DNA
    • Papertrail

You can also have a look at below options: If you want to have your logs in JSON format, as it will help if your are pushing your logs to external system like Splunk/ELK, it would become easy (performance wise also) to search in JSON.

https://github.com/goodeggs/heroku-log-normalizer

It is not having Readme.md, but some explanation is given at https://github.com/goodeggs/bites/issues/20

Lastly

And you can always use below command as mentioned by other users already:

The following command will tail the generating logs on heroku

heroku logs -t -a <app_name>

下面的命令将显示来自heroku的日志行数1000

heroku logs -n 1000 -a <app_name>

注意,只有1500行最新的日志可用,其余的将从heroku dyno中删除。

我遇到了这样的情况,在我的应用程序的仪表板中,当我打开:

更多的在查看日志

 Heroku GUI dashboard的截图

我不会得到输出,只是挂起…

所以我做了一个谷歌,发现:

Heroku CLI插件列出和创建Heroku应用程序的构建。

我安装并运行:

heroku builds -a example-app /* Lists 10 most recently created builds for example-app, that's where you get the id for the next step*/

然后输入:

heroku builds:output your-app-id-number -a example-app

就是这样,您应该会得到通常在仪表板GUI或本地看到的内容。

希望这能帮助到像我一样的人!