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
Author: gylaz, 2011-10-13

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
 239
Author: Ryan Bigg,
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
 60
Author: jrochkind,
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
 37
Author: Christoph Petschnig,
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
 9
Author: fakeleft,
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
 7
Author: Micah,
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.

 6
Author: Nate Ben,
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
 3
Author: Telmo Costa,
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