2011-06-21 33 views
26

当我在服务器上查看我的Heroku的日志(与heroku logs --tail --app myapp)我看到这样的内容:Heroku:在日志中查看params和sql活动?

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" = '[email protected]' 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,任何模板呈现等等等。

有没有人知道我如何让我的英雄日志像我的发展一样冗长?我已经做了以下不已:

1)设置日志级别,在相关的(轨道3)环境文件:

config.log_level = :debug 

2)告诉Heroku上使用不同的记录水平,在http://devcenter.heroku.com/articles/logging描述

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

没有任何区别...任何想法的人?
谢谢,最大

回答

39

你基本上想要显示在Heroku日志中的SQL/params输出。您可以通过添加production.rb文件中如下所示的config块行做到这一点:

MyAppNameHere::Application.configure do 

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

end 

顺便说一句,设置日志级别来调试只是意味着Rails.logger.debug将输出到记录中,当你在Heroku

+0

aha,太好了!谢谢:) –

+0

很高兴帮助,最大! – iwasrobbed

+2

太棒了!这对我也有效,Heroku的支持告诉我,我的一个宝石超越了输出。将代码添加到'production.rb'而不是'application.rb'可能更合适,只是一个想法。 – Bob

2

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

+0

谢谢扎克,但就像我在我的帖子中说过的,我已经试过了。 –

+0

嗯。你有没有试图用其他方法捕获它们?像http://railscasts.com/episodes/277-mountable-engines这样的快速和肮脏的东西可能会诀窍。显然这对你所需要的东西来说太过分了,但如果没有别的东西在工作......或者你认为它纯粹是记录器没有实际输出这些信息? –

+0

这工作对我来说 – Paludis

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 

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

这是一个信息级别的日志。这就是为什么调试日志级别不会改变输出。

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

现在,我无法使用heroku进行测试,以了解为什么您没有全部日志。

在heroku示例中(请参阅Heroku日志记录,节日志检索),我们看不到“Processing”和“Parameters”行。我认为,当应用程序在heroku上运行时(不知何故禁用),或者heroku跳过以空格开始的日志时,此方法不会被调用。你能否尝试记录以空格开始的消息并查看heroku是否正在显示它们?

0

貌似美洲狮服务器不与Heroku的发挥好。在我的项目中,我尝试了一切,但它仍然不会记录。然后我用麒麟取代了彪马,并且全部日志都显示出来了。