Ruby on rails 在Rails中,如何记录每个传入HTTP请求的全部内容?
我正在构建一个与正在向Rails发送请求的Rails后端对话的应用程序。它失败了。有没有一种简单的方法让Rails日志和spit来控制每个传入HTTP请求的全部内容Ruby on rails 在Rails中,如何记录每个传入HTTP请求的全部内容?,ruby-on-rails,http,logging,Ruby On Rails,Http,Logging,我正在构建一个与正在向Rails发送请求的Rails后端对话的应用程序。它失败了。有没有一种简单的方法让Rails日志和spit来控制每个传入HTTP请求的全部内容 如果有人觉得自己特别仁慈,你可以帮助解决潜在的问题。使用简单的curl命令可以很好地工作: $ curl -X POST -d "<person><name>Jack</name></person>" -H "Content-Type: application/xml" 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>
$curl-X POST-d“Jack”-H“内容类型:application/xml”http://localhost:3000/people.xml
2009-11-08T16:36:54Z
3.
杰克
2009-11-08T16:36:54Z
但Rails在我的应用程序发送请求时抛出的错误是:
/!\ 故障保护/!\2009年11月8日星期日11:38:23-0500
状态:500内部服务器错误
不良内容正文
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:347:in“parse_multipart”
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:319:in'loop'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/utils.rb:319:in“parse_multipart”
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/request.rb:141:in'POST'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/methodoverride.rb:15:in'call'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action_controller/params_parser.rb:15:in'call'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/session/cookie\u store.rb:93:in'call'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/failsafe.rb:26:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:在“同步”中
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/lock.rb:11:in'call'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/dispatcher.rb:114:in'call'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/reloader.rb:34:in'run'
/Library/Ruby/Gems/1.8/Gems/actionpack-2.3.4/lib/action\u controller/dispatcher.rb:108:in'call'
/Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/rails/rack/static.rb:31:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:46:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:40:in'each'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/urlmap.rb:40:in'call'
/Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/rails/rack/log_tailer.rb:17:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/content_length.rb:13:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/chunked.rb:15:in'call'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/handler/mongrel.rb:61:在“进程”中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:在“进程\客户端”中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in'each'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:在“进程\客户端”中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:运行中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:在“初始化”中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in'new'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:运行中
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in'initialize'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in“new”
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/Ruby/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in'run'
/Library/Ruby/Gems/1.8/Gems/rack-1.0.0/lib/rack/handler/mongrel.rb:34:in'run'
/Library/Ruby/Gems/1.8/Gems/rails-2.3.4/lib/commands/server.rb:111
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in'gem_original_require'
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in'require'
脚本/服务器:3
您最好的选择可能是让前端服务器(apache、nginx等)将这些内容吐出来 或者,如果要从rails执行此操作,请在控制器中使用
request.env
,例如,如下所示
logger.info(request.env.inspect)
我感谢你的回答,冈德森,尽管这并没有让我找到解决办法。我最终使用了第三方工具,连接到我的环回设备并报告所有TCP流量
我的问题是由于我使用的客户端网络库(错误地将我的XML/JSON报告为多部分形式)中的疏忽造成的。该
logger.info request.env
代码在Rails控制器中运行良好,但要查看更原始的版本,或者如果您使用的是Grape或其他安装的应用程序,您必须在通过机架中间件链的途中拦截请求
将此代码放入lib目录(或位于application.rb
的底部):
然后与application.rb中的其他config
s一起进入:
require 'pp'
class Loggo
def initialize(app)
@app = app
end
def call(env)
pp env
@app.call(env)
end
end
config.middleware.use "Loggo"
不幸的是,Rails在调用任何控制器代码之前就崩溃了,所以log语句永远不会运行。我想接下来我会研究打印进入Mongrel服务器的每个请求。。。