【问题标题】:heroku - how to see all the logsheroku - 如何查看所有日志
【发布时间】:2011-02-09 22:00:23
【问题描述】:

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

heroku logs

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

【问题讨论】:

    标签: heroku logging


    【解决方案1】:

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

    【讨论】:

    • 这现在不适用于雪松堆栈。有人找到新的替代品了吗?
    • 只需使用heroku logs -n 1500,这是 Cedar 上可用的最佳方法。如果你需要更多的行,你需要一个 syslog 消耗:devcenter.heroku.com/articles/logging#syslog_drains
    • 这对于资产管道问题也是一个有用的提示:heroku logs -n 2000 | grep '预编译'
    • 其实是heroku run rails c。更新了!
    • 对于旧方法,为什么要运行 rails 控制台而不是 heroku run cat log/production.log
    【解决方案2】:

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

    $ heroku logs -n 500
    

    更好!

    $ heroku logs --tail
    

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

    更新

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

    【讨论】:

    • 另外,-n 可以上升到 1500,我假设 Heroku 只是在那之后切断任何东西。
    【解决方案3】:

    对于雪松堆栈,请参阅:

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

    你需要运行:

    heroku 运行 bash ...

    【讨论】:

    • 在 Cedar heroku run bash 上启动一个新的测功机来托管 bash 命令。该测功机上的文件系统不会包含来自“活动”网络测功机的任何日志文件,因此这种方法不起作用。
    【解决方案4】:

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

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

    其次,Heroku 上的文件系统是短暂的,这意味着每当您的 dyno 重新启动或移动(大约发生在once a day)时,日志文件都会丢失。因此,您最多只能查看该单个测功机的日志。

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

    Logging 和一般可见性是 Heroku 上的一等公民,有多种工具可以解决这些问题。首先,要查看应用程序事件的实时流跨所有测功机和应用程序/堆栈的所有层,请使用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 的日志事件流。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 但是过一会就停了。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        heroku logs --source app -t
        

        或者只查看路由器日志

        heroku logs --ps router
        

        或者把它们串起来

        heroku logs --source app --ps worker
        

        太好了..

        【讨论】:

        • 只查看我的应用程序的日志:heroku logs --ps web.1 (with 1 dyno)
        【解决方案8】:

        关注Heroku logging

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

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

        heroku logs

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

        heroku logs -n 200

        1. 实时显示日志

        heroku logs --tail

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

        heroku logs --app your_app_name

        【讨论】:

          【解决方案9】:

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

          【讨论】:

          • 此方法仅显示日志输出,从您单击“查看日志”选项开始。因此,除非您只想在不进入控制台的情况下从本质上跟踪日志,否则它没有用处。
          • 没有任何选项可以查看此 UI 本身的所有日志吗?
          【解决方案10】:

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

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

          然后通过运行

          heroku logs -t
          

          你可以看到详细的日志。

          【讨论】:

            【解决方案11】:

            我更喜欢这样做

            heroku logs --tail | tee -a herokuLogs
            

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

            【讨论】:

            • 谢谢,我花了一段时间滚动,但终于找到了适合我的解决方案。
            【解决方案12】:

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

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

            heroku logs --tail --app=myapp
            

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

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

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

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

            npm 错误! /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
            

            【讨论】:

            • 我收到/usr/bin/less: cannot execute binary files
            【解决方案13】:

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

            heroku logs -n 1500 > log
            

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

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

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

            【讨论】:

              【解决方案14】:

              对于 WAR 文件:

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

              所以以下对我有帮助:

              heroku logs --app appname
              

              希望对某人有所帮助。

              【讨论】:

                【解决方案15】:

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

                heroku addons:create logentries:le_tryit

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

                Logentries 允许您每月最多保存 5GB 的日志量。该信息可在过去 7 天内通过他们的命令搜索进行搜索,并且具有实时警报。

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

                【讨论】:

                  【解决方案16】:

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

                  heroku logs -t --app app_name
                  

                  【讨论】:

                    【解决方案17】:

                    heroku logs -t 向我们展示了实时日志。 heroku logs -n 1500 用于特定数量的日志

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

                    【讨论】:

                      【解决方案18】:

                      你可以使用 heroku logs -n 1500

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

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

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

                      【讨论】:

                        【解决方案19】:

                        您需要实现一些日志排空,并且应该在那里排空您的日志,以查看所有日志(以及管理历史日志):

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

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

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

                          • Timber.io
                          • 相扑逻辑
                          • Lo​​gEnteries
                          • 记录 DNA
                          • 纸轨

                        您还可以查看以下选项:如果您想要 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>
                        

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

                        heroku logs -n 1000 -a <app_name>
                        

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

                        【讨论】:

                        • 您好,您使用 Splunk Cloud 吗?如果是这样,你是如何让 Heroku 流失的?我正在使用 HTTP 事件收集器并启用 AllowStringQueryAuth 以在 URL 中包含 HEC 令牌,但没有数据通过。
                        【解决方案20】:

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

                        更多 > 查看日志

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

                        于是我google了一下,发现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 或本地看到的内容。

                        希望这可以帮助像我这样的人!

                        【讨论】:

                          猜你喜欢
                          • 2014-02-13
                          • 2012-03-18
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-04-12
                          • 2015-10-20
                          • 2016-03-13
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多