Die Antwort stellt sich heraus, viel schwieriger zu sein, als ich erwartet hatte, da Schienen wirklich keinen Haken, dies zu tun bietet. Stattdessen müssen Sie einige der Eingeweide von ActionController :: Base einpacken. In der gemeinsamen Basisklasse für meinen Controller, ich
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
dann in der Steuerung mit dem Verfahren möchte ich mich auf der Anmeldung zu unterdrücken:
def silent?(action)
RAILS_ENV == "development" && ['my_noisy_action'].include?(action)
end
Wonder, wenn Sie Rack-Middleware irgendwie verwenden könnte - so könnte man die „Rails.logger werfen.Stille "Block um die komplette Anfrage-Antwort, wenn die Anfrage entspricht Ihrem Muster. – fig
Ich schaute kurz auf das. Ich könnte etwas verpasst haben, aber es sah aus wie zu der Zeit Rack Middleware beteiligt ist, weiß es nicht, welche Controller/Aktion wird aufgerufen – archbishop
http://edgeguides.rubyonrails.org/4_0_release_notes.html ActiveSupport :: Benchmarkable # silence ist aufgrund fehlender Threadsicherheit veraltet und wird in Rails 4.1 ersatzlos entfernt –