Heroku:看日志中的params和sql活动?

时间:2011-06-21 14:37:55

标签: ruby-on-rails logging heroku

当我在服务器上查看我的heroku日志时(使用heroku logs --tail --app myapp),我看到如下内容:

2011-06-21T14:09:25+00:00 app[web.1]: Started PUT "/reports/19.xml" for 77.89.149.137 at 2011-06-21 07:09:25 -0700
2011-06-21T14:09:25+00:00 heroku[router]: PUT myapp.heroku.com/reports/19.xml dyno=web.1 queue=0 wait=0ms service=7ms status=401 bytes=28
2011-06-21T14:09:26+00:00 heroku[nginx]: PUT /reports/19.xml HTTP/1.1 | 77.89.149.137 | 656 | http | 401

在我的本地日志中,我会看到类似的内容:

Started PUT "/reports/19" for 127.0.0.1 at 2011-06-21 15:27:01 +0100
  Processing by ReportsController#update as XML
  Parameters: {"report"=>{"workflow_status"=>"3"}, "id"=>"19"}
  Person Load (0.9ms)  SELECT "people".* FROM "people" WHERE "people"."email" = 'madeupemai@lkklj.com' LIMIT 1
  Report Load (0.4ms)  SELECT "reports".* FROM "reports" WHERE "reports"."id" = 19 LIMIT 1
DEPRECATION WARNING: Object#returning has been deprecated in favor of Object#tap. (called from update_report at /home/max/work/rails_apps/flamingo_container/flamingo/vendor/plugins/resource_this/lib/resource_this.rb:135)
Creating scope :open. Overwriting existing method Task.open.
  Task Load (2.0ms)  SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = 14 LIMIT 1
Completed 200 OK in 1648ms (Views: 568.2ms | ActiveRecord: 3.2ms)

即有更多信息,特别是params,来自路由器的信息,生成的sql,任何渲染的模板等等。

有谁知道我怎么能让我的heroku日志像我的开发一样冗长?我已经完成了以下工作:

1)在相关(rails 3)环境文件中设置日志级别:

config.log_level = :debug

2)告诉heroku使用不同的记录器级别,如http://devcenter.heroku.com/articles/logging

所述
heroku config:add LOG_LEVEL=DEBUG --app myapp #from CLI

两者都没有任何差异......任何人的想法? 谢谢,最大

6 个答案:

答案 0 :(得分:39)

您实际上想要在Heroku日志中显示SQL / params输出。您可以将以下显示的行添加到config文件中的production.rb块中来执行此操作:

MyAppNameHere::Application.configure do

  # add this line
  config.logger = Logger.new(STDOUT)

end

顺便说一下,将日志级别设置为debug只是意味着当你在Heroku上时Rails.logger.debug将输出到日志

答案 1 :(得分:2)

在您的production.rb中添加config.log_level = :debug并重新部署。这将为您提供与开发模式相同的日志:)

答案 2 :(得分:1)

您想要的详细日志由log_subscriber.rb中的函数start_processing生成。

action_controller / log_subscriber.rb:

def start_processing(event)
  payload = event.payload
  params  = payload[:params].except(*INTERNAL_PARAMS)

  info "  Processing by #{payload[:controller]}##{payload[:action]} as #{payload[:formats].first.to_s.upcase}"
  info "  Parameters: #{params.inspect}" unless params.empty?
end

我在开发和生产环境中使用rails 3.0.4进行了检查。在这两种环境中,我们都有详细的日志。

这是一个信息级日志。这就是调试日志级别没有改变输出的原因。

我安装了heroku rails_log_stdoutHeroku logging)使用的插件,但我仍然有所需的输出。

现在,我无法使用heroku进行测试,找出为什么没有所有日志。

在heroku示例中(参见Heroku日志记录,部分日志检索),我们没有看到“Processing”和“Parameters”行。我认为当应用程序在heroku上运行时(或者以某种方式禁用)或者heroku从空格开始跳过日志时,不会调用此方法。你能尝试记录以空格开头的消息,看看heroku是否正在显示它们吗?

答案 3 :(得分:0)

Rails在生产模式下不生成这些日志。 http://groups.google.com/group/heroku/browse_thread/thread/d778fafedc9a378a

答案 4 :(得分:0)

真正的问题实际上是由于Heroku与rails配合使用的方式。解决此问题的正确方法是添加:gem 'rails_12factor', group: :production

有关此事的更多信息,请参阅https://devcenter.heroku.com/articles/rails-integration-gems

答案 5 :(得分:0)

看起来美洲狮服务器与Heroku不能很好地配合。在我的项目中,我尝试了一切,但它仍然不会记录。然后我用Unicorn取代了Puma,然后显示了bam,完整的日志。