我有一个Rails应用程序,但经过一段时间的开发/调试后,我意识到能够在日志文件中查看整个HTTP请求非常有用 - log / development.log,而不仅仅是参数。
我还希望有一个基于用户的单独日志文件,而不是会话。
任何想法都将受到赞赏!
答案 0 :(得分:38)
您可以通过以下方式快速查看视图中的request.env:
如果您希望从控制器中将其记录在开发日志中:
在这里,您可以看到Request对象的reference。
Rails使用Ruby Standard Library中的Logger自动设置日志/目录中的文件记录。日志文件将根据您的环境进行命名,例如:登录/ development.log。
要从控制器或模型记录消息,请使用记录器方法访问Rails记录器实例:
class YourController < ActionController::Base
def index
logger.info request.env
end
end
关于用户,您使用什么来验证它?
答案 1 :(得分:4)
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
然后使用config
中的其他application.rb
:
config.middleware.use "Loggo"
答案 2 :(得分:2)
您可以使用机架中间件在中间件看到它们时记录请求(由http服务器解析并由前面的中间件转换)。如果您的http服务器支持这样的功能,您还可以配置您的http服务器以记录完整请求。
http服务器(web服务器)负责接收http请求,解析它们,以及将数据结构传输到应用服务器(例如,机架应用程序)。应用程序服务器看不到原始请求,但会看到http-server发送的方式。
答案 3 :(得分:0)
我最初使用@AlexChaffee的代码片段,但我已经切换到使用mitmproxy,这是一个专门的HTTP代理,记录通过它的请求和响应。
当您控制发出请求的应用程序时,这显然只对开发方案有用。您可以使用生产应用程序的反向代理实现类似的结果(优点是您不必为此触摸Rails应用程序本身),但我没有研究过。