heroku - 如何查看所有日志

时间:2010-04-19 22:57:34

标签: heroku logging

我在heroku上有一个小应用程序。每当我想查看日志时,我都会进入命令行并执行

heroku logs

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

20 个答案:

答案 0 :(得分:742)

更新(感谢dawmail333):

heroku logs -n 1500

或者,将日志拖到现场

heroku logs -t 

Heroku log documentation

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

或者(旧方法):

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

答案 1 :(得分:138)

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

$ heroku logs -n 500

更好!

$ heroku logs --tail

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

<强>已更新

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

答案 2 :(得分:49)

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

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

其次,Heroku上的文件系统是短暂的意思,无论何时重新启动或移动dyno(发生在once a day左右),日志文件都会丢失。因此,您最多只能获得一天的单个dyno日志视图。

最后,在Cedar stack正在运行的heroku console甚至heroku run bash上,您无法将您连接到当前正在运行的dyno。它专门为bash命令生成一个新的命令。这称为one-off process。因此,您将找不到正在为heroku run生成的实际http进程运行其他dynos的日志文件。

Logging,一般来说,可见性是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 ...

这对于立即观察应用程序的行为非常有用。如果您希望将日志存储更长时间,可以使用提供日志保留,警报和触发器的众多logging add-ons中的一个。

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

摘要:请勿使用heroku consoleheroku run bash来查看静态日志文件。使用heroku logs或日志记录加载项将Heroku的日志事件流传输到您的应用程序。

答案 3 :(得分:21)

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

仅显示您的应用程序日志

heroku logs --source app -t

或仅查看路由器日志

heroku logs --ps router

或将它们连在一起

heroku logs --source app --ps worker

太好了..

答案 4 :(得分:18)

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

image view

答案 5 :(得分:12)

关注heroku logging

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

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

    heroku日志

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

      heroku logs -n 200

      1. 实时显示日志
      2.   

        heroku logs --tail

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

          heroku logs --app your_app_name

答案 6 :(得分:8)

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

答案 7 :(得分:8)

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

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

heroku logs --tail --app=myapp

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

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

如果日志告诉你这样的话:

  

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

     

npm 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

答案 8 :(得分:7)

可能值得将free Papertrail plan之类的内容添加到您的应用中。零配置,您可以获得7天的日志数据,最高可达10MB /天,并可以搜索2天的日志。

答案 9 :(得分:4)

用于WAR文件:

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

所以以下帮助了我:

heroku logs --app appname

希望它会对某人有所帮助。

答案 10 :(得分:2)

我更喜欢这样做

heroku logs --tail | tee -a herokuLogs

您可以让脚本在后台运行,您只需按照自己想要的方式从文本文件中过滤日志。

答案 11 :(得分:2)

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

heroku logs -n 1500 > log

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

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

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

答案 12 :(得分:2)

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

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

然后运行

heroku logs -t

你可以看到详细的日志。

答案 13 :(得分:1)

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

heroku addons:create logentries:le_tryit

(该命令为免费帐户创建插件,但显然可以根据需要升级)

Logentries允许您每月节省高达5GB的日志量。该信息可在过去7天内通过命令搜索进行搜索,并且具有实时警报。

所以要回答你的问题,通过使用这个插件,你可以确保当你达到Heroku默认保存的1500行时你的日志不再丢失。 希望这可以帮助!祝你有美好的一天!

答案 14 :(得分:1)

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

heroku logs -t --app app_name

答案 15 :(得分:1)

您需要执行一些日志清除操作,并且应该在此处清除日志,以查看所有日志(还管理历史日志):

  1. 第一个选项-可以使用Splunk:您可以消耗所有日志,例如:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

然后登录到splunk服务器并搜索任意数量的日志。我正在使用Splunk,这对我来说很好用。

  1. 第二个选项-您可以购买App的附加组件,如下所示:(我没有使用这些选项,但是这些是可用的)。

    • Timber.io
    • Sumo Logic
    • LogEnteries
    • 记录DNA
    • Papertrail
  

您还可以查看以下选项:如果您想拥有自己的   以JSON格式记录日志,因为如果您将日志推送到   像Splunk / ELK这样的外部系统,它会变得很容易(性能   明智的选择)以JSON搜索。

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

它没有Readme.md,但在https://github.com/goodeggs/bites/issues/20

中给出了一些解释。

最后

并且您可以始终使用其他用户已经提到的以下命令:

以下命令将在heroku上拖尾生成日志

heroku logs -t -a <app_name>

以下命令将显示来自heroku的日志的 1000

heroku logs -n 1000 -a <app_name>
  

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

答案 16 :(得分:0)

heroku logs -t向我们显示实时日志。 heroku logs -n 1500获取特定数量的日志

但是我仍然建议使用具有一定好处并且有免费基本计划的纸质追踪插件。

答案 17 :(得分:0)

您可以使用 heroku logs -n 1500

但这不是推荐的方法(换句话说,它不会向您显示真实图片)

我建议您插入一些日志记录工具。 (sumoLogic,纸张记录为n all)作为附件

它们都有一个免费版本(尽管有一些限制,但对于小型应用程序或开发环境而言,这是足够的,这将提供很好的见解和工具来分析日志)

答案 18 :(得分:0)

当我去:

更多 > 查看日志

screenshot of Heroku GUI dashboard

我不会得到输出,只是挂了...

于是我用谷歌搜索了一下,发现this

<块引用>

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 或本地看到的内容。

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

答案 19 :(得分:-2)

对于雪松堆栈,请参阅:

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

你需要运行:

heroku run bash ...