我正在尝试将更多信息输入到我的Rails日志中,特别是请求的URI或当前参数(如果可用)(我感谢它们并非总是如此)。但是我似乎无法做到。这是我到目前为止所做的:
#config/environments/production.rb
config.logger = Logger.new(config.log_path)
config.log_level = :error
config.logger.level = Logger::ERROR
#config/environment.rb
class Logger
def format_message(level, time, progname, msg)
"**********************************************************************\n#{level} #{time.to_s(:db)} -- #{msg}\n"
end
end
所以我可以自定义消息,但我似乎无法在这里访问params / request变量。有谁知道这是否可能,如果是这样的话怎么样?或者,如果有更好的方法来获取此信息? (甚至可能是基于Redis的东西?)
感谢加载,
丹
答案 0 :(得分:25)
(在被问到这个问题很长一段时间后回复,但也许这对下一个人有帮助。)
我刚刚做了类似的事情。
1)您需要单独覆盖记录器以记录请求级别详细信息。看起来你已经想出了自定义你的记录器了。答案在这里: Rails logger format string configuration
2)我将所有请求的请求和响应记录到我的服务中。请注意,Rails将大量内容放入标题中,因此直接转储请求或标题可能是一个坏主意。另外值得注意的是,我的应用程序主要通过API访问。如果你的主要是一个网络应用程序,因为我猜大多数人都是,你可能不想检查response.body,因为它将包含你的HTML。
class ApplicationController < ActionController::Base
around_filter :global_request_logging
...
def global_request_logging
http_request_header_keys = request.headers.keys.select{|header_name| header_name.match("^HTTP.*")}
http_request_headers = request.headers.select{|header_name, header_value| http_request_header_keys.index(header_name)}
logger.info "Received #{request.method.inspect} to #{request.url.inspect} from #{request.remote_ip.inspect}. Processing with headers #{http_request_headers.inspect} and params #{params.inspect}"
begin
yield
ensure
logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}"
end
end
end
答案 1 :(得分:3)
这应该有效! :)干杯。
logger.info({:user_agent => request.user_agent, :remote_ip => request.remote_ip}.inspect)
logger.info(params.inspect)
by by ..这应该放在你的控制器动作中。例如:如果您将其置于 创建 操作中,则还应记录user_agent,即浏览器,remote_ip,即用户的远程ip和所有参数。
答案 2 :(得分:0)
你应该查看请求类
like puts request.uri。
点击此处查看更多详情http://api.rubyonrails.org/classes/ActionController/AbstractRequest.html