忽略Rails记录基于IP的请求

时间:2011-05-04 18:18:29

标签: ruby-on-rails logging haproxy

我有一个支持HAProxy的rails应用程序,我想忽略来自HAProxy服务器ping的所有Rails日志记录。服务器正在以1 /秒为单位进行ping操作,并且真正使日志文件变得混乱。

3 个答案:

答案 0 :(得分:1)

尚未对此进行测试,但它应该有效:


class Rails::Rack::Logger
  def call_with_filter(env)
    if env['REMOTE_ADDR'] == '10.0.0.1'
      @app.call(env)
    else
      call_without_filter(env)
    end
  end
  alias_method_chain :call, :filter
end

请参阅railties-3.0.7 / lib / rails / rack / logger.rb作为原文。

答案 1 :(得分:0)

我选择的解决方案更具系统性。我在公共目录中创建了一个静态文本文件,并切换HAProxy以将其用作ping位置。没有日志记录,也没有代码解决方案那么复杂。

我确实尝试了上面的例子并且能够使它工作,但是对于这个问题做一个猴子补丁似乎没有必要,但是如果要求有点复杂(即HAProxy必须击中特定的控制器)那我就选择Roman's solution

答案 2 :(得分:0)

我最终选择的解决方案技术相对较低。

使用HAProxy的目标不仅仅是负载平衡,还要确保正在进行定向流量的节点实际上已启动。这意味着我们希望HAProxy不仅可以访问服务器以查看它是否已启动,还可以测试Nginx和Passenger是否正常运行。

我将一个静态文本文件放在rails项目的公共资产中,让HAProxy命中该文件。该文件将由完整堆栈提供,并且是服务启动的一个不错的指示器。作为公共资产,点击不会出现在日志中,并且垃圾邮件会被停止。

虽然这不会对Rails堆栈进行更深入的测试,但是实现的时间比任何编码解决方案都要低,它不会给应用程序增加任何额外的复杂性,并且可以用于任何未来的应用程序。