query - Deshabilitar el registro de Rails SQL en la consola
rails where like (7)
¿Hay alguna forma de deshabilitar el registro de consultas SQL cuando estoy ejecutando comandos en la consola? Idealmente, sería genial si pudiera deshabilitarlo y volver a habilitarlo con un comando en la consola.
Estoy tratando de depurar algo y usando "pone" para imprimir algunos datos relevantes. Sin embargo, el resultado de la consulta SQL hace que sea difícil de leer.
Edit: encontré otra solución, ya que configurar el registrador en nil a veces generaba un error, si algo más que mi código intentaba llamar a logger.warn
En lugar de configurar el registrador en nil
, puede establecer el nivel del registrador en 1
.
ActiveRecord::Base.logger.level = 1 # or Logger::INFO
Aquí hay una variación que considero un poco más limpia, que todavía permite otros registros de AR. En config / environment / development.rb:
config.after_initialize do
ActiveRecord::Base.logger = Rails.logger.clone
ActiveRecord::Base.logger.level = Logger::INFO
end
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
En caso de que alguien quiera realmente eliminar el registro de sentencias de SQL (sin cambiar el nivel de registro, y mientras mantiene el registro de sus modelos de AR):
La línea que escribe en el registro (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
.
Entonces podemos eliminar el registro sobrescribiéndolo así:
module ActiveSupport
class LogSubscriber
def debug(*args, &block)
end
end
end
Para Rails 4 puedes poner lo siguiente en un archivo de entorno:
# /config/environments/development.rb
config.active_record.logger = nil
Para apagarlo:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
Para volver a encenderlo:
ActiveRecord::Base.logger = old_logger
Puede que esta no sea 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
Utilicé esto: config.log_level = :info
edit-in config/environments/performance.rb
Trabajando muy bien para mí, rechazando la salida de SQL y mostrando solo la representación y la información importante.