从rails日志中过滤部分或全部请求URL

Rails提供filter_parameter_logging来过滤rails日志中的敏感参数。

如果您有一个JSONP API,URL中可能会出现一些敏感信息。 有没有办法从日志中过滤请求URL?

注意 :这里的答案是让它在Rails 2.x~> 3.0上运行的方法。 从Rails 3.1开始,如果设置config.filter_parameters ,Rails也会过滤掉查询字符串中的敏感参数。 有关详细信息,请参阅此提交 。


我认为在这种情况下,你需要覆盖ActionController :: Base中的 complete_request_uri ,因为ActionController :: Benchmarking调用该方法并打印如下所示的行:

 Completed in 171ms (View: 35, DB: 7) | 200 OK [http://localhost:3000/] 

我想你可以把它放在初始化器中来覆盖这个方法

 class ActionController::Base private def complete_request_uri "#{request.protocol}#{request.host}#{request.request_uri.gsub(/secret=([a-z0-9]+)/i, "secret=[FILTERTED]")}" end end 

请注意,您需要使用正则表达式进行一些操作,以使其替换您想要的部分。

遗憾的是,这在Rails 3中不再有效。路径(包括查询参数)来自ActionDispatch :: Request ,它inheritance自Rack :: Request 。 这是你可以投入初始化程序的相关monkeypatch:

 class ActionDispatch::Request def fullpath @fullpath ||= super.gsub(/secret=[^&]+/, 'secret=[FILTERED]') end end 

我切换到在正则表达式中使用[^&] ,因为参数可以很容易地包含不是字母或数字的字符。