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
7 answers
Para apagarlo:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
Para volver A encenderlo:
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/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
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
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
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
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.
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
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