如何最小化监控请求的日志记录?
我的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_path”。我无意中从定义filtered_path的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_path或Logger :: Error。我尝试了其他要求,但没有运气。
我还想要关于在我的项目中使用这个猴子补丁的健壮性的任何建议。有一个更好的方法吗?
我知道有些人不相信改变日志,但我不希望所有这些ping在日志中,除非在请求期间有错误。
其中记录器是由一个自定义记录器替换为Rails 3的一种可能的解决方案在此描述:Silencing the Rails log on a per-action basis和这里:How can I disable logging in Ruby on Rails on a per-action basis?。我必须将require 'rails/all'
添加到custom_logger.rb
类才能使其正常工作。
我已经解决了我遇到的两个问题,尽管我仍然很欣赏使用这个猴子补丁和任何改进以使它更加健壮的指导。 – 2011-03-29 18:26:54