Wyłączanie logowania Rails SQL w konsoli
Czy istnieje sposób, aby wyłączyć rejestrowanie zapytań SQL, gdy wykonuję polecenia w konsoli? Idealnie, byłoby świetnie, gdybym mógł po prostu wyłączyć go i włączyć ponownie za pomocą polecenia w konsoli.
Próbuję coś debugować i za pomocą "puts" wydrukować odpowiednie dane. Jednak wynik zapytania sql sprawia, że trudno go odczytać.
Edit: Znalazłem inne rozwiązanie, ponieważ ustawienie loggera na nil czasami powodowało błąd, jeśli coś innego niż mój kod próbowałem zadzwonić do loggera.warn
Zamiast ustawiać logger na nil
można ustawić poziom loggera na 1
.
ActiveRecord::Base.logger.level = 1 # or Logger::INFO
7 answers
Aby go wyłączyć:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
Aby włączyć go z powrotem:
ActiveRecord::Base.logger = old_logger
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-13 20:37:11
Oto odmiana, którą uważam za nieco czystszą, która nadal pozwala na potencjalne inne logowanie z AR. W config / environments / development.rb:
config.after_initialize do
ActiveRecord::Base.logger = Rails.logger.clone
ActiveRecord::Base.logger.level = Logger::INFO
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-08 16:40:03
Może to nie być odpowiednie rozwiązanie dla konsoli, ale Rails ma metodę na ten problem: Logger#silence
ActiveRecord::Base.logger.silence do
# the stuff you want to be silenced
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-04 11:47:54
W przypadku, gdy ktoś chce faktycznie wybić logowanie instrukcji SQL (bez zmiany poziomu logowania i przy zachowaniu logowania z ich modeli AR):
Linia, która zapisuje się do dziennika (w Rails 3.2.16) jest wywołaniem debug
w lib/active_record/log_subscriber.rb:50
.
Ta metoda debugowania jest zdefiniowana przez ActiveSupport::LogSubscriber
.
Więc możemy znokautować logowanie przez nadpisanie go w ten sposób:
module ActiveSupport
class LogSubscriber
def debug(*args, &block)
end
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 18:07:34
Dla Rails 4 możesz umieścić w pliku środowiskowym:
# /config/environments/development.rb
config.active_record.logger = nil
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-25 01:20:26
Użyłem tego: config.log_level = :info
edit-in config/environments/performance.rb
Działa świetnie dla mnie, odrzucając wyjście SQL i pokazując tylko rendering i ważne informacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 08:34:12
W Rails 3.2 robię coś takiego w config/environment / development.rb:
module MyApp
class Application < Rails::Application
console do
ActiveRecord::Base.logger = Logger.new("#{Rails.root}/log/development.log")
end
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 15:57:28