312 votes

Désactiver la journalisation SQL de Rails 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, il faudrait que je puisse la désactiver et la réactiver par une commande dans la console.

J'essaie de déboguer quelque chose et j'utilise "puts" pour imprimer des données pertinentes. Cependant, la sortie de la requête sql est difficile à lire.


Edit : J'ai trouvé une autre solution, puisque mettre le logger à nil soulevait parfois une erreur, si quelque chose d'autre que mon code essayait d'appeler logger.warn

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

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

0 votes

since setting the logger to nil sometimes raised an error yap J'ai eu celui-là en essayant d'exécuter rake db:migrate stackoverflow.com/questions/1719212/

3 votes

Je confirme que cela fonctionne dans Rails 4.1.0 dans un initialisateur.

11voto

Nate Ben Points 251

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

Cela fonctionne très bien pour moi, en rejetant la sortie SQL, et en ne montrant que le rendu et les informations importantes.

4voto

Max Williams Points 10129

Juste pour info, dans Rails 2 vous pouvez faire

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

De toute évidence, les accolades pourraient être remplacées par un symbole do end si vous le vouliez.

4voto

Telmo Costa Points 21

Dans Rails 3.2, je fais quelque chose comme ça 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

3voto

nwnoll Points 96

J'utilise activerecord 6.0.3.3 et j'ai dû inclure ActiveSupport::LoggerSilence

include ActiveSupport::LoggerSilence

ActiveSupport::LoggerSilence.silence do
    ## everything you want to silence
end

Cela n'a cependant pas fonctionné avec tout ce qui est lié à la création ou à la suppression de tables SQL telles que ActiveRecord::Migration.drop_table . Pour que cela se taise, j'ai ajouté :

ActiveRecord::Schema.verbose = false

2voto

Chris R Points 6336

J'ai dû résoudre ce problème pour ActiveRecord 6, et j'ai basé ma réponse sur fakeleft mais ce n'était pas tout à fait correct, car il supprimait d'autres enregistrements, comme ceux des vues imbriquées. Ce que j'ai fait, c'est créer config/initializers/activerecord_logger.rb :

# Suppress SQL statement logging if necessary
# This is a dirty, dirty trick, but it works:
if ENV["ACTIVERECORD_HIDE_SQL"].present?
  module ActiveRecord
    class LogSubscriber
      def sql(event)
      end
    end
  end
end

L'abonné au journal dans AR 6 a un sql l'événement que nous voulons cacher, donc c'est très étroitement ciblé pour sauter que événement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X