Deshabilitar el registro SQL de Rails en la consola


¿Hay alguna forma de deshabilitar el registro de consultas SQL cuando estoy ejecutando comandos en la consola? Idealmente, sería genial si solo puedo desactivarlo y volver a habilitarlo con un comando en la consola.

Estoy tratando de depurar algo y usar "puts" para imprimir algunos datos relevantes. Sin embargo, la salida de la consulta sql hace que sea difícil de leer.


Editar: Encontré otra solución, ya que configurar el registrador a nil a veces generó un error, si algo que no sea mi código intenté llamar a Logger.warn

En lugar de establecer el logger a nil puede establecer el nivel del logger a 1.

ActiveRecord::Base.logger.level = 1 # or Logger::INFO
Author: gylaz, 2011-10-13

7 answers

Para apagarlo:

old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil

Para volver A encenderlo:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-13 20:37:11

Aquí hay una variación que considero algo más limpia, que todavía permite otros posibles registros de AR. En 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-08 16:40:03

Esto podría no ser una solución adecuada para la consola, pero Rails tiene un método para este problema: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-04 11:47:54

En caso de que alguien quiera realmente eliminar el registro de sentencias SQL (sin cambiar el nivel de registro, y manteniendo el registro de sus modelos AR):

La línea que escribe en el log (en Rails 3.2.16, de todos modos) es la llamada a debug en lib/active_record/log_subscriber.rb:50.

Ese método de depuración está definido por ActiveSupport::LogSubscriber.

Así que podemos eliminar el registro sobrescribiéndolo de esta manera:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-08 18:07:34

Para Rails 4 puede poner lo siguiente en un archivo de entorno:

# /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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-25 01:20:26

Usé esto: config.log_level = :info edit-in config/environments/performance.rb

Funciona muy bien para mí, rechazando la salida SQL, y muestra solo renderizado e información importante.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-14 08:34:12

En Rails 3.2 estoy haciendo algo como esto en 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-06 15:57:28