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
Pour l'éteindre:
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = nil
Pour le réactiver:
ActiveRecord::Base.logger = old_logger
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
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
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
Pour Rails 4, vous pouvez placer les éléments suivants dans un fichier d’environnement:
# /config/environments/development.rb
config.active_record.logger = nil
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.
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
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.