2015-08-27 2 views
2

В режиме создания приложений Rails я устанавливаю уровень журнала ошибок error.Как фильтровать журналы в Rails

Но я хочу установить некоторые контроллеры для действий (или маршрутов) до уровня access, так как я могу это понять? Если в журнале есть фильтр?

+0

Я не уверен, что я понимаю вопрос – Kiloreux

+0

То есть, я хочу, чтобы какой-то контроллер и действие регистрировали 'info', а остальные посетили журнал' error' – HXH

ответ

0

Вы можете использовать around filter для регулировки уровня протоколирования для действия, например:

class MyBigFancyController < ApplicationController 
    around_action :adjust_logging_level_to_access, only: :show 

    def show 
    end 

    private 

    def adjust_logging_level_to_access 
    old_level = Rails.logger.level 
    Rails.logger.level = Logger::DEBUG 
    yield 
    Rails.logger.level = old_level 
    end 
end 

Если вы должны сделать это во многих контроллерах, рассмотреть вопрос о переносе его на ApplicationController.

Обратите внимание, что adjusting the Rails logging level at run time is not thread safe. Если вам нужна безопасность потоков, вам необходимо вручную записать журнал в соответствующие местоположения.

+0

Связанный http://stackoverflow.com/q/2196828/525478 имеет несколько интересных подходов, но вам придется их переворачивать ... –

+0

Спасибо, это хорошее решение. Но у меня есть вопрос: если два пользователя посещают страницу A, которая имеет 'adjust_logging_level_to_access' и другую страницу B без' adjust_logging_level_to_access' в то же время. Так будет ли страница B занесена в журнал DEBUG? Поскольку уровень журнала глобальный, поэтому изменение уровня на странице A влияет на уровень журнала на странице B, не так ли? – HXH

+0

@HXH Да, если ваш сервер многопоточен и работает несколько потоков. Это текущее ограничение Rails, как описано в github.com/rails/rails/issues/20490 –

Смежные вопросы