我有一个Rails应用程序,但经过一段时间的开发/调试,我意识到能够在日志文件-log/development. log中看到整个HTTP请求将非常有帮助,而不仅仅是参数。我还希望有一个单独的日志文件的基础上,用户,而不是会话。任何想法将不胜感激!
zqdjd7g91#
您可以通过以下方式在视图中快速查看request.env:
*VIEW:<%= request.env.inspect %>
如果您想将其记录在开发日志中,请从您的控制器:
*控制器:Rails.logger.info(request.env)
在这里,您可以看到Request对象的reference。Rails使用Ruby标准库中的Logger自动将日志记录设置为log/目录中的文件。日志文件将根据您的环境命名,例如log/development.log。要记录来自控制器或模型的消息,请使用logger方法访问Rails logger示例:
class YourController < ActionController::Base def index logger.info request.env end end
关于用户,您使用什么对其进行身份验证?
8wigbo562#
logger.info request.env代码在Rails控制器中工作正常,但要查看更原始的版本,或者如果您使用Grape或其他安装的应用程序,您必须在通过机架中间件链的过程中拦截请求。将以下代码放在lib目录中(或application.rb的底部):
logger.info request.env
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 s中:
config
config.middleware.use "Loggo"
sqserrrh3#
您可以使用rack中间件记录中间件看到的请求(由http服务器解析并由前面的中间件转换)。如果你的http服务器支持这样的功能,你也可以配置你的http服务器来记录完整的请求。http服务器(web服务器)负责接收http请求,解析它们,并将数据结构发送到应用服务器(例如,机架应用)。应用服务器看不到原始请求,但看到http服务器发送的内容。
46qrfjad4#
我最初使用的是@AlexChaffee的代码片段,但后来我改用了mitmproxy,这是一个专门的HTTP代理,可以记录通过它的请求和响应。这显然只对控制发出请求的应用程序的开发场景有帮助。对于生产应用程序,您也许可以使用反向代理来实现类似的结果(优点是您不必为此接触Rails应用程序本身),但我还没有对此进行研究。
slhcrj9b5#
只是跟进AlexChaffee的精彩回答。我们的中间件Loggo需要放在application.rb中**module YourApp之前。如前所述,添加config.middleware.use "Loggo"env就是Hash,所以我们可以得到env.keys例如,输出一个整洁的必要标题:
Loggo
module YourApp
env
Hash
env.keys
class Loggo def initialize(app) @app = app end def call(env) heds = %w( QUERY_STRING SERVER_PROTOCOL REQUEST_URI GATEWAY_INTERFACE HTTP_ORIGIN HTTP_HOST HTTP_X_FORWARDED_FOR REMOTE_ADDR ) heds.each do |hed| puts "#{hed.ljust(30)} => #{env[hed]}" end @app.call(env) end end
并使用STDOUT手动运行轨道:RAILS_LOG_TO_STDOUT=true RAILS_ENV=production bundle exec rails s到达终点站:
RAILS_LOG_TO_STDOUT=true RAILS_ENV=production bundle exec rails s
QUERY_STRING => SERVER_PROTOCOL => HTTP/1.1 REQUEST_URI => /cable GATEWAY_INTERFACE => CGI/1.2 HTTP_ORIGIN => http://example.com HTTP_HOST => example.com HTTP_X_FORWARDED_FOR => X.X.X.X REMOTE_ADDR => 127.0.0.1
5条答案
按热度按时间zqdjd7g91#
您可以通过以下方式在视图中快速查看request.env:
*VIEW:<%= request.env.inspect %>
如果您想将其记录在开发日志中,请从您的控制器:
*控制器:Rails.logger.info(request.env)
在这里,您可以看到Request对象的reference。
Rails使用Ruby标准库中的Logger自动将日志记录设置为log/目录中的文件。日志文件将根据您的环境命名,例如log/development.log。
要记录来自控制器或模型的消息,请使用logger方法访问Rails logger示例:
关于用户,您使用什么对其进行身份验证?
8wigbo562#
logger.info request.env
代码在Rails控制器中工作正常,但要查看更原始的版本,或者如果您使用Grape或其他安装的应用程序,您必须在通过机架中间件链的过程中拦截请求。将以下代码放在lib目录中(或
application.rb
的底部):然后在
application.rb
中的其他config
s中:sqserrrh3#
您可以使用rack中间件记录中间件看到的请求(由http服务器解析并由前面的中间件转换)。如果你的http服务器支持这样的功能,你也可以配置你的http服务器来记录完整的请求。
http服务器(web服务器)负责接收http请求,解析它们,并将数据结构发送到应用服务器(例如,机架应用)。应用服务器看不到原始请求,但看到http服务器发送的内容。
46qrfjad4#
我最初使用的是@AlexChaffee的代码片段,但后来我改用了mitmproxy,这是一个专门的HTTP代理,可以记录通过它的请求和响应。
这显然只对控制发出请求的应用程序的开发场景有帮助。对于生产应用程序,您也许可以使用反向代理来实现类似的结果(优点是您不必为此接触Rails应用程序本身),但我还没有对此进行研究。
slhcrj9b5#
只是跟进AlexChaffee的精彩回答。
我们的中间件
Loggo
需要放在application.rb
中**module YourApp
之前。如前所述,添加
config.middleware.use "Loggo"
env
就是Hash
,所以我们可以得到env.keys
例如,输出一个整洁的必要标题:
并使用STDOUT手动运行轨道:
RAILS_LOG_TO_STDOUT=true RAILS_ENV=production bundle exec rails s
到达终点站: