Как я могу отключить входящий в систему Ruby on Rails на основе на действие?

У меня есть приложение направляющих, которое имеет действие, которое вызывается достаточно часто, чтобы быть неудобным, когда я разрабатываю, поскольку оно приводит к большому дополнительному выводу журнала, я не забочусь о. Как я могу заставить направляющие не регистрировать что-нибудь (контроллер, действие, параметры, complection время, и т.д.) для просто этого действия? Я хотел бы к conditionalize его на RAILS_ENV также, поэтому входит в систему, производство завершено.

Спасибо!

37
задан archbishop 4 February 2010 в 01:44
поделиться

2 ответа

Ответ оказался намного сложнее, чем я ожидал, поскольку в rails действительно нет крючка для этого. Вместо этого вам нужно обернуть некоторые внутренности ActionController::Base. В общем базовом классе для моих контроллеров я делаю

def silent?(action)
  false
end

# this knows more than I'd like about the internals of process, but
# the other options require knowing even more.  It would have been
# nice to be able to use logger.silence, but there isn't a good
# method to hook that around, due to the way benchmarking logs.

def log_processing_with_silence_logs
  if logger && silent?(action_name) then
    @old_logger_level, logger.level = logger.level, Logger::ERROR
  end

  log_processing_without_silence_logs
end

def process_with_silence_logs(request, response, method = :perform_action, *arguments)
  ret = process_without_silence_logs(request, response, method, *arguments)
  if logger && silent?(action_name) then
    logger.level = @old_logger_level
  end
  ret
end

alias_method_chain :log_processing, :silence_logs
alias_method_chain :process, :silence_logs

затем, в контроллере с методом, в котором я хочу подавить логирование:

def silent?(action)
  RAILS_ENV == "development" && ['my_noisy_action'].include?(action)
end
7
ответ дан 27 November 2019 в 04:55
поделиться

Вы можете отключить объект регистратора Rails:

def action
  Rails.logger.silence do
    # Things within this block will not be logged...
  end
end
16
ответ дан 27 November 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: