簡體   English   中英

在Rails中,如何記錄每個傳入HTTP請求的全部內容?

[英]In Rails, how can one log the entirety of each incoming HTTP request?

我正在構建一個與Rails后端對話的應用程序,該后端正在將請求發布到Rails。 失敗了。 有沒有一種簡便的方法可以讓Rails記錄和吐出信息來控制每個傳入HTTP請求的全部?


如果有人感到特別慈善,則可以為根本原因提供幫助。 使用簡單的curl命令可以正常工作:

$ curl -X POST -d "<person><name>Jack</name></person>" -H "Content-Type: application/xml" http://localhost:3000/people.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <person>
  <created-at type="datetime">2009-11-08T16:36:54Z</created-at>
  <id type="integer">3</id>
  <name>Jack</name>
  <updated-at type="datetime">2009-11-08T16:36:54Z</updated-at>
 </person>

但是,當我的應用程序發送請求時,Rails發出的錯誤是:

/!\\ FAILSAFE /!\\ Sun Nov 08 11:38:23 -0500 2009狀態:500內部服務器錯誤內容主體錯誤/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/utils。 rb:347:在`parse_multipart'/庫/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/utils.rb:319:在`loop'/庫/Ruby/Gems/1.8/gems/ rack-1.0.0 / lib / rack / utils.rb:319:在`parse_multipart'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/request.rb:141:在`POST中'/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/methodoverride.rb:15:在'call'中/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib /action_controller/params_parser.rb:15:在`call'中/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/session/cookie_store.rb:93:在`call'中/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/failsafe.rb:26:在`call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock。 rb:11:在`call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in在'synchronize'/Library/Ruby/Gems/1.8/gems/ rack-1.0.0 / lib / rack / lock.rb:11:在`call'/ Librar中 y / Ruby / Gems / 1.8 / gems / actionpack-2.3.4 / lib / action_controller / dispatcher.rb:114:在`call'中/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller /reloader.rb:34:在`run'中/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/dispatcher.rb:108:在`call'中/Library/Ruby/Gems/1.8 /gems/rails-2.3.4/lib/rails/rack/static.rb:31:在`call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb: 46:在`call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:40:在`each'中/each/Library/Ruby/Gems/1.8/gems/rack- 1.0.0 / lib / rack / urlmap.rb:40:在`call'中/Library/Ruby/Gems/1.8/gems/rails-2.3.4/lib/rails/rack/log_tailer.rb:17:在`call中'/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/content_length.rb:13:在'call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib /rack/chunked.rb:15:在`call'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:61:在`process'中/ System / Library /Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in` process_client'/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:位於/ each /庫/框架/Ruby.framework/版本/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:在'process_client'/ System / Library / Frameworks / Ruby中.framework / Versions / 1.8 / usr / lib / ruby​​ / gems / 1.8 / gems / mongrel-1.1.5 / lib / mongrel.rb:285:在`run'中/System/Library/Frameworks/Ruby.framework/Versions/ 1.8 / usr / lib / ruby​​ / gems / 1.8 / gems / mongrel-1.1.5 / lib / mongrel.rb:285:在'initialize'中/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib /ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:在`new'中/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/ 1.8 / gems / mongrel-1.1.5 / lib / mongrel.rb:285:在`run'中/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel -1.1.5 / lib / mongrel.rb:268:在'initialize'中/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel- 1.1.5 / lib / mongrel.rb:268:在`new'中/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/lib /mongrel.rb:268:在`run'中/Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/handler/mongrel.rb:34:在`run'/ Library / Ruby / Gems / Gems /1.8/gems/rails-2.3.4/lib/commands/server.rb:111 /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:位於`gem_original_require'/Library/Ruby/Site/1.8/ rubygems / custom_require.rb:31:在'require'腳本/服務器中:3

您最好的選擇可能是使前端服務器(apache,nginx等)吐出來……

或者,如果您想從導軌上進行操作,請在控制器中使用request.env ,例如,如下所示

logger.info(request.env.inspect)

我很感謝您的回應,甘德森,即使這並沒有完全引導我找到解決方案。 我最終使用了第三方工具PacketPeeper來附加到我的環回設備並報告所有TCP流量。

我的問題是由我正在使用的客戶端網絡庫中的一個疏忽引起的(錯誤地將我的XML / JSON報告為多部分形式)。

那個logger.info request.env代碼在Rails控制器中可以正常工作,但是要查看其更原始的版本,或者如果您正在使用Grape或其他已掛載的應用程序,則必須通過機架攔截請求中間件鏈...

將此代碼放在您的lib目錄中(或在application.rb的底部):

require 'pp'
class Loggo
  def initialize(app)
    @app = app
  end
  def call(env)
    pp env
    @app.call(env)
  end
end

然后與application.rb的其他config一起:

config.middleware.use "Loggo"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM