web-dev-qa-db-fra.com

Désactiver Rails Enregistrement SQL dans la console

Existe-t-il un moyen de désactiver la journalisation des requêtes SQL lorsque j'exécute des commandes dans la console? Idéalement, ce serait bien si je pouvais simplement le désactiver et le réactiver avec une commande dans la console.

J'essaie de déboguer quelque chose et d'utiliser des "options" pour imprimer des données pertinentes. Cependant, le résultat de la requête SQL rend la lecture difficile.


Edit: J'ai trouvé une autre solution, car régler le journal sur nil générait parfois une erreur si quelque chose d'autre que mon code tentait d'appeler logger.warn.

Au lieu de régler l'enregistreur sur nil, vous pouvez définir le niveau de l'enregistreur sur 1.

ActiveRecord::Base.logger.level = 1 # or Logger::INFO
239
gylaz

Pour l'éteindre:

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

Pour le réactiver:

ActiveRecord::Base.logger = old_logger
280
Ryan Bigg

Voici une variante que je considère un peu plus propre, qui permet encore d’autres possibilités d’enregistrement à partir d’AR. Dans config/environnements/development.rb:

config.after_initialize do
  ActiveRecord::Base.logger = Rails.logger.clone
  ActiveRecord::Base.logger.level = Logger::INFO
end
68
jrochkind

Cela n’est peut-être pas une solution appropriée pour la console, mais Rails a une méthode à ce problème: Logger # silence

ActiveRecord::Base.logger.silence do
  # the stuff you want to be silenced
end
52

Dans le cas où quelqu'un voudrait réellement supprimer la journalisation des instructions SQL (sans modifier le niveau de journalisation et en conservant la journalisation à partir de leurs modèles AR):

La ligne qui écrit dans le journal (de toute façon dans Rails 3.2.16) est l'appel à debug dans lib/active_record/log_subscriber.rb:50.

Cette méthode de débogage est définie par ActiveSupport::LogSubscriber.

Nous pouvons donc supprimer l’enregistrement en l’écrivant de la manière suivante:

module ActiveSupport
  class LogSubscriber
    def debug(*args, &block)
    end
  end
end
13
fakeleft

Pour Rails 4, vous pouvez placer les éléments suivants dans un fichier d’environnement:

# /config/environments/development.rb

config.active_record.logger = nil
12
Micah

J'ai utilisé ceci: config.log_level = :info edit-in config/environments/performance.rb

Travaillant très bien pour moi, rejetant la sortie SQL et ne montrant que le rendu et des informations importantes.

8
Nate Ben

Dans Rails 3.2, je fais quelque chose comme ceci dans config/environment/development.rb:

module MyApp
  class Application < Rails::Application
    console do
      ActiveRecord::Base.logger = Logger.new( Rails.root.join("log", "development.log") )
    end
  end
end
4
Telmo Costa

Tout comme un FYI, dans Rails 2, vous pouvez faire

ActiveRecord::Base.silence { <code you don't want to log goes here> }

Évidemment, les accolades pourraient être remplacées par un bloc do end si vous le souhaitez.

0
Max Williams