2011-03-26 50 views
2

我的Rails应用程序每分钟进行一次健康检查,除非出现错误,否则我想保留这些应用程序。我能够在application_controller.rb这个设定记录器为此在Rails的2.3.5:如何最小化监控请求的日志记录?

def logger 
    if params[:__no_logging__] == 'true' && params[:controller] == 'welcome' 
     && params[:action] == 'index' 
    # ignore monitoring requests 
    RAILS_MONITOR_NULL_LOGGER 
    else 
    RAILS_DEFAULT_LOGGER 
    end 
end 

但是,这并不对Rails 3.0.5

我已经能够正常工作放在一起用的Monkeypatching Rails中before_dispatch和after_dispatch一个新的解决方案::架::急件:

require 'active_support/core_ext/time/conversions' 
module Rails 
    module Rack 
    # Log the request started and flush all loggers after it. 
    class Logger 
     include ActiveSupport::BufferedLogger::Severity 

     def before_dispatch(env) 
     request = ActionDispatch::Request.new(env) 

     #path = request.filtered_path 
     path = request.fullpath 

     if request.path == '/' && request.parameters['__no_logging__'] == 'true' 
      @log_level = logger.level 
      logger.level = Logger::ERROR 
      #logger.level = 3 
     end 

     info 
     "\n\nStarted #{request.request_method} 
      \"#{path}\" " \ 
      "for #{request.ip} at #{Time.now.to_default_s}" 
     end 
     def after_dispatch(env) 
     logger.level = @log_level unless @log_level.nil? 
     ActiveSupport::LogSubscriber.flush_all! 
     end 
     end 
    end 
end 

我把补丁配置/初始化/ monkey_patch.rb

这工作前actly因为我需要,我没有看到在日志中这样的要求:

http://mydomain.com?__no_logging__=true

但所有其他要求保留日志不受影响

在但仍有两个问题:

1.我需要注释掉:

path = request.filtered_path 

因为它会导致这个错误:

ERROR NoMethodError: undefined method `filtered_path' for #<ActionDispatch::Request:0x105b4c0e8> 
/ce_development/Rails/g3/config/initializers/monkey_patches.rb:52:in `before_dispatch' 
/ce_development/Rails/g3/.bundle/ruby/1.8/gems/railties-3.0.5/lib/rails/rack/logger.rb:12:in `call' 
... 

我现在明白这不是问题。在我使用的Rails 3.0.5中不存在有问题的方法“request.filtered_pa​​th”。我无意中从定义filtered_pa​​th的Rails 3.1.0.beta复制了我的类。 Rails 3.0.5使用request.fullpath,如上所示。

2.我需要注释掉

logger.level = Logger::ERROR 

因为它会导致该错误:

ERROR NameError: uninitialized constant Rails::Rack::Logger::ERROR 
/ce_development/Rails/g3/config/initializers/monkey_patches.rb:57:in `before_dispatch' 
/ce_development/Rails/g3/.bundle/ruby/1.8/gems/railties-3.0.5/lib/rails/rack/logger.rb:12:in `call' 
... 

我通过添加上述

include ActiveSupport::BufferedLogger::Severity 
这行解决了这个第二个问题

我是新来的猴子补丁,我无法弄清楚如何获得我的补丁中定义的filtered_pa​​th或Logger :: Error。我尝试了其他要求,但没有运气。

我还想要关于在我的项目中使用这个猴子补丁的健壮性的任何建议。有一个更好的方法吗?

我知道有些人不相信改变日志,但我不希望所有这些ping在日志中,除非在请求期间有错误。

+0

我已经解决了我遇到的两个问题,尽管我仍然很欣赏使用这个猴子补丁和任何改进以使它更加健壮的指导。 – 2011-03-29 18:26:54

回答

相关问题