Hvordan kan jeg redusere logging av overvåking forespørsler?

stemmer
2

Min rails app er pinged hvert minutt for en helsesjekk, og jeg ønsker å holde disse ut av loggen med mindre det er en feil. Jeg var i stand til å gjøre dette i Rails 2.3.5 ved å sette logger med dette i application_controller.rb:

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

Men dette fungerer ikke i Rails 3.0.5

Jeg har vært i stand til å sette sammen en ny løsning ved monkeypatching before_dispatch og after_dispatch i Rails :: Rack :: Leveranse:

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

Jeg satte lappen i config / initializers / monkey_patch.rb

Dette fungerer akkurat som jeg trenger, jeg kan ikke se denne forespørselen i loggen:

http://mydomain.com?__no_logging__=true

Men alle andre forespørsler forbli i loggen upåvirket

Men det er fortsatt to problemer:

1. Jeg trengte å kommentere ut:

path = request.filtered_path

Fordi det fører til denne feilen:

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'
...

Jeg forstår nå er dette ikke et problem. Uakseptable metoden request.filtered_path finnes ikke i Rails 3.0.5, som jeg bruker. Jeg utilsiktet kopiert min klasse fra Rails 3.1.0.beta som gjør definere filtered_path. Skinner 3.0.5 bruker request.fullpath som nå er vist ovenfor.

2. Jeg trengte å kommentere ut

logger.level = Logger::ERROR

Fordi det fører til denne feilen:

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'
...

I løste dette andre problemet ved å legge til denne linjen over

include ActiveSupport::BufferedLogger::Severity

Jeg er ny på ape patching og jeg kan ikke finne ut hvordan du får filtered_path eller Logger :: Feil definert i mitt område. Jeg har prøvd andre krever, men uten hell ennå.

Jeg vil også gjerne noen råd om hvor robust bruke denne ape lapp på mitt prosjekt. Finnes det en bedre måte å gjøre dette?

Jeg vet at noen mennesker tror ikke på å endre logger, men jeg ønsker ikke alle disse ping i loggen med mindre det er en feil i løpet av sin forespørsel.

Publisert på 26/03/2011 klokken 18:36
kilden bruker
På andre språk...                            


1 svar

stemmer
0

En mulig løsning for Rails 3 hvor Logger er erstattet av en tilpasset Logger er beskrevet her: Dempe Rails logge på en per-action basis og her: Hvordan kan jeg deaktivere logging i Ruby on Rails på en per-action basis? . Jeg måtte legge require 'rails/all'til custom_logger.rbklassen for å gjøre det arbeidet.

Svarte 27/10/2011 kl. 11:43
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more