【问题标题】:How to increase Heroku log drain verbosity to include all Rails app details?如何增加 Heroku 日志消耗的详细程度以包含所有 Rails 应用程序详细信息?
【发布时间】:2011-12-23 06:42:24
【问题描述】:

目前我正在 Heroku Celadon Cedar 上运行 Rails 3.1.x 应用程序,似乎非常缺乏日志冗长性。我已将日志级别设置为 DEBUG a la heroku config:add LOG_LEVEL=DEBUG --app app_name,这符合他们的建议,但除此之外,我似乎无法提取 log/* 文件内容。

从 Thin 更改为 Unicorn 确实略微增加了详细程度,但仅在 Web Worker 请求中。我仍然无法拉下数据库请求等等。

通过heroku“drain”机制最大化日志详细程度的最佳方法是什么,以便可以将所有实例日志拉到一个有凝聚力的日志中?

(理想情况下,我想包括一种将其转储到我自己的日志服务器中的方法,因为这只是后部无法及时查看特定事件和周围条件的痛苦。)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 logging heroku ruby-on-rails-3.1


    【解决方案1】:

    在 staging.rb、production.rb 或您正在运行的任何环境中,您可以插入以下内容:

    STDOUT.sync = true
    
    logger = Logger.new(STDOUT)
    logger.level = 0 # Must be numeric here - 0 :debug, 1 :info, 2 :warn, 3 :error, and 4 :fatal
    # NOTE:   with 0 you're going to get all DB calls, etc.
    
    Rails.logger = Rails.application.config.logger = logger
    
    ### NOTE: Be sure to comment out these:
    #   See everything in the log (default is :info)
    #   config.log_level = :debug  # Commented out as per Chris' instructions from Heroku
    
    #   Use a different logger for distributed setups
    #   config.logger = SyslogLogger.new
    

    【讨论】:

    • > 我在我的 Rails 3 应用程序的雪松堆栈上尝试了上述解决方案,但应用程序无法启动。得到错误/app/vendor/bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/rack/log_tailer.rb:8:in size': 没有这样的文件或目录 - log/production.log (Errno::ENOENT) 2012-02-01T02:12:41+00:00 app[web.1]: from /app/vendor /bundle/ruby/1.9.1/gems/rack-1.2.4/lib/rack/server.rb:247:in new' 2012-02-01T02:12:41+00:00 app[web.1]: from /app/vendor/bundle/ruby/1.9.1/gems/railties-
    • 有趣。我建议您就此联系支持人员。您是否尝试过通过 shell 登录您的应用程序:heroku run bash 以查看 production.log 是否存在或该文件夹是否存在权限问题?我之前只在 staging.rb env 上设置过这个,所以可能有一个约束阻止了这个在生产中......虽然从顶部开始没有意义。
    • 试过heroku bash,发现不存在日志。也许从那以后发生了变化。将联系支持。顺便说一句,我尝试将 xyz_whtaever 放入我的控制器文件中,这些文件显示在 heroku 日志中。但这并不理想。感谢您的快速回复。
    【解决方案2】:

    我认为 ActiveRecord 记录器对象会发送所有带有 DEBUG 严重级别的 SQL 查询日志。您可能需要调整 Rails.logger 日志级别以使它们也投入生产。

    由于您有兴趣将所有 Rails 和 Heroku 日志转储到外部服务,我可以建议您尝试 Progstr Logger 免费插件。 (免责声明,我为 Progstr 工作)。该插件有一个 Ruby gem,它将收集所有 Rails 日志(通常以 log/* 结尾的所有内容)。它还将设置一个日志消耗,它将获取所有系统级 Heroku 日志。此外,您还可以获得一个很酷的 Web UI,让您可以轻松搜索日志和其他一些不错的功能。

    【讨论】:

    • 我已经添加了 Progstr,但是我仍然没有在我的日志输出中看到额外的详细信息(即,我认为我应该从 log/* 中看到的内容)。在 config/environments/.rb 方面我有什么遗漏吗?例如,我想知道,即使我设置了heroku config:add LOG_LEVEL=DEBUG,并且我设置了“config.consider_all_requests_local = true”以更清楚地查看异常,我仍然无法提取数据库查询和似乎所有我应该的额外详细信息在日志/* 中看到。显然在 Cedar 中通过 shell 登录是不够的。
    • @ylluminate,问题是 ActiveRecord 记录器将记录带有 DEBUG 级别的 SQL 语句。 Rails 竭尽全力停止在生产环境中记录调试事件(这确实是件好事)。您仍然可以通过调整 Rails 记录器及其日志设备来使其记录 SQL 调试语句。或者您可以添加progstr-ruby gem 并设置Progstr::RailsLogger 类,如下所述:docs.progstr.com/#local_setup。请注意,Progstr::RailsLogger 将事件直接传递到我们的服务器,而不会将它们路由到 syslog 消耗。例如:i.imgur.com/DxF2B.png
    • 我已经安装了 progstr,但是我非常希望看到为所有暂存事件(即,不是生产)提供的附加信息。为了进行设置,我只是将 production.rb 复制到 staging.rb 并调整了一些设置,但我怀疑有一种方法可以强制 staging 在日志记录方面表现得像开发?
    • 您也可以为暂存环境进行设置 - 只需将 Progstr::RailsLogger 部分复制到您的 staging.rb 文件:i.imgur.com/VHlBg.png
    • 非常感谢这里的反馈。经过大量努力,我最终找到了解决此问题的“正确”方法。我现在将其作为正确答案发布,供大家参考。事实证明,有一些 gem 覆盖了正常行为,如果发生这种情况,必须强制执行。似乎这只发生在 Heroku 上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2016-04-27
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多