Comment désactiver la journalisation des messages de pipeline d'actifs (sprockets) dans Ruby on Rails 3.1?


378

Les pignons ont tendance à être assez verbeux dans le journal (dev) par défaut sous Ruby on Rails 3.1 (RC1):

Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/application.css.scss  (5ms)  (pid 6303)


Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/default.css.scss  (15ms)  (pid 6303)

...
Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Served asset /default/header_logo.gif - 304 Not Modified  (7ms)  (pid 6303)
Served asset /default/header_bg.gif - 304 Not Modified  (0ms)  (pid 6246)
Served asset /default/footer_bg.gif - 304 Not Modified  (49ms)  (pid 6236)
...

Je voudrais soit réduire le niveau de verbosité, soit le désactiver complètement.

Je suppose qu'il existe un moyen propre de désactiver ou de réduire la verbosité de la journalisation en ajoutant une ligne de configuration dans l'une environment.rbou l' autre ou qui development.rbsimilaire config.active_record.logger = nilrend silencieuses les instructions SQL ActiveRecord.


Quelqu'un a signalé un bogue à ce sujet: # 2639 . Toujours "ouvert" au 9/2.
istvanp

14
La réponse acceptée pour cette question doit être modifiée ou mise à jour. Dans Rails 3.2, vous pouvez simplement mettre config.assets.debug = falsevotre development.rb.
Stewart Johnson

7
@StewartJohnson - config.assets.debug = falseconcaténera les actifs dans un seul fichier - pas ce que la plupart des gens veulent en développement
Yarin

Réponses:


382

Placez le code suivant dans config/initializers/quiet_assets.rb

if Rails.env.development?
  Rails.application.assets.try(:logger=, Logger.new('/dev/null'))
  Rails::Rack::Logger.class_eval do
    def call_with_quiet_assets(env)
      previous_level = Rails.logger.level
      Rails.logger.level = Logger::ERROR if env['PATH_INFO'] =~ %r{^/assets/}
      call_without_quiet_assets(env)
    ensure
      Rails.logger.level = previous_level
    end
    alias_method_chain :call, :quiet_assets
  end
end

Mise à jour: Cela fonctionne maintenant aussi pour Ruby on Rails 3.2 (correctifs de tentative précédents before_dispatch, et maintenant nous allons à la callplace pour le rack racine )

Mise à jour: une solution de middleware Rack appropriée (au lieu de fragile alias_method_chain) de @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735


3
Depuis Rails 3.2.1, ces pulls seuls ne réduisent pas à néant la journalisation du sprocket et le fichier de choonkeat est toujours nécessaire.
IAmNaN

5
En effet. Des sons comme ce fichier seront toujours nécessaires, car le réglage config.assets.loggersur false ne fera que couper les sorties de Sprockets. Cela réduit au silence les demandes / réponses du pack d'action, ce que les développeurs de Rails ont déclaré qu'ils n'avaient pas l'intention de réduire au silence dans des cas spéciaux .
Ben Kreeger

32
euh. vous devriez juste mettre cela dans le noyau des rails. en faire une option dans config.assets
jsharpe

2
Sur les fenêtres, remplacez '/dev/null'par ' NUL'
Matt

4
Fonctionne pour moi sur Rails 4.2.0
moteur série

189

Jetez un œil à https://github.com/evrone/quiet_assets et incluez-le simplement dans votre fichier Gem.

Pour les paresseux: gem 'quiet_assets', group: :development


6
Excellent travail, mais très triste qu'un bijou séparé soit nécessaire pour cela.
Adam Spires

1
Je pense que Jose Valim a pris la bonne décision ici github.com/rails/rails/issues/2639 rails doit enregistrer toutes les demandes entrantes et je suis d'accord avec cela, je pense que nous pouvons nous débarrasser de ces frais généraux lorsque les pignons prendront en charge la carte source github.com / sstephenson / pignons / issues / 310
itinéraire

5
pour les paresseux: gem 'quiet_assets'(veuillez l'ajouter au post :))
reto

52

Pour Ruby on Rails 3.2, ajoutez config.assets.logger = falseà votre fichier de configuration de l'environnement de développement, généralement à l'adresse config/environments/development.rb. Voir # 4512 .


Fonctionne dans Raise 4 comme prévu. Nécessaire pour redémarrer le serveur pour que cela fonctionne.
Langusten Gustel

2
Rails 4.0.2 config.assets.logger = nilfonctionne pour moi
byterussian

4
Rails 4.0.4 config.assets.logger = nilne fonctionne PAS pour moi
hendrikbeck

28

Deux choses suffisent:

  1. config.assets.debug = false dans config/enviroments/development.rb
  2. rake assets:precompile. Voir le commentaire de @oma ci-dessous; ce n'est pas nécessaire

C'est tout!


19
1. est correct. Merci! Veuillez supprimer le No 2. rake assets:precompilen'est pas quelque chose que nous voulons faire en développement
oma

Bien que cela n'ait probablement pas fonctionné au moment de la publication de la question d'origine, cela fonctionne maintenant (et, comme @Race l'a indiqué, avec déjà 3.2.3) et devrait-il y avoir la réponse acceptée maintenant.
radiospiel

2
Comme le souligne istvanp ci-dessous, cela ne fait pas ce que vous pensez qu'il fait. Il compile uniquement tous les actifs JS et CSS dans un seul grand fichier - il ne désactive pas la journalisation des actifs.
davidgoli

2
C'est tout ce qui est nécessaire dans les rails 4.2.2
thisfeller

Ajout à ce que @davidgoli a dit: config.assets.debug contrôle la concaténation des actifs. Désactiver cela signifie que le débogage, par exemple JS et CSS à l'aide du navigateur, deviendra plus difficile. Quelque chose comme quiet_assets réduira la journalisation sans vous obliger à basculer assets.debug vers, enfin, à déboguer.
johncip

27

Finalement, ce sera le cas config.assets.logger = nil, mais cette partie est actuellement tronquée sur le maître (pas encore terminée).


5
Ne fonctionne pas non plus pour moi sur Rails 3.1.3. @nessur: êtes-vous sûr que cela fonctionne pour vous? Comme Tim le dit, le # 2639 est toujours ouvert, et je ne vois aucune indication dans ce problème de correctif (les deux demandes d'extraction référencées ont été rejetées).
Adam Spires

Cela ne sera pas mis en œuvre à ce stade. github.com/rails/rails/issues/4569
23inhouse

@AdamSpiers selon le lien: github.com/rails/rails/pull/3795#issuecomment-3549669 "Les rails ne feront pas cas particulier des enregistreurs ou des middlewares liés à l'enregistreur pour ne pas enregistrer d'itinéraires spécifiques"
23

3
Bummer. Rails 4 ne peut toujours pas facilement désactiver la journalisation des actifs.
Tom Rossi

1
J'utilise Rails 4.2, je l'ai mis dans mon development.rb, et cela a désactivé la journalisation des actifs.
Jack

12

Je sais que c'est une solution laide et temporaire, mais j'utilise ceci:

tail -f log / development.log | grep -vE 'atout'


9
Voici une amélioration qui supprime également les lignes vides:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

Beaucoup de gens sont confus quant à l'utilisation de config.assets.logger = false. Voici ce qu'il fait et ce qu'il ne fait pas.

Selon la documentation source :

La valeur config.assets.loggerfalse désactive la journalisation des actifs servis.

Cependant, ce n'est probablement pas ce que vous pensez. Il désactive uniquement les journaux de « distribution » de sprocket , pas les journaux de demande de pack d'action Ruby on Rails. Le mainteneur Ruby on Rails l'explique clairement ici: https://github.com/rails/rails/issues/4569#issuecomment-3594500


En prenant l'exemple du lien, les journaux comme celui-ci sont désactivés:

Élément desservi /jquery.isotope.js - 304 non modifié (0 ms)

Mais les journaux comme celui-ci ne sont pas

A commencé GET "/assets/jquery.isotope.js?body=1" pour 127.0.0.1 au 2012-01-20 23:16:46 -0500


10
config.assets.quiet = true

C'est la dernière façon de procéder.


Fonctionne parfaitement dans Rails 5. Il suffit de le viderdevelopment.rb
Andreykul

Couplé avec le débogage, ne résout pas tous mes besoins dans Rails 5.
Pysis

7

Utilisation:

Rails.application.assets.logger = Logger.new(RUBY_PLATFORM =~ /(win|w)32$/ ? "NUL" : "/dev/null")
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end

C'est le même code que choonkeat ajouté . Je l'ai juste inclus pour fonctionner également sous Windows.


7

Dans le fichier development.rb dans config / environnements, vous trouverez la ligne config.assets.debug = true.

Basculez cela vers falseet la plupart de la sortie de la charge des actifs aura disparu. Sur mon système, seules les deux demandes, pour application.css et .js, restent.


3
Ce paramètre vous permet uniquement de diviser les feuilles de style et le javascript en fichiers séparés lorsqu'il est défini sur true pour un débogage plus facile. Lorsqu'il est défini sur false (par défaut), il les regroupe tous dans un seul gros fichier. Donc, cela réduit en effet la sortie de débogage mais si vous avez des images par exemple, celles-ci ne sont pas du tout affectées. Informations sur le guide officiel ici .
istvanp

1
Je vois. Merci d'avoir clarifié cela. Mais je n'ai pas changé le réglage de cette variable, donc ma valeur par défaut était true.
TKAB

5

Dans le fichier config / environnements / development.rb veuillez ajouter:

config.assets.debug = false

config.assets.logger = false

2

Lograge pour la victoire - il tue les paramètres par défaut de l'enregistreur ennuyeux de Ruby on Rails (par exemple, journalisation des actifs, journalisation du rendu partiel) et est personnalisable si vous souhaitez ajouter / supprimer des éléments spécifiques.


0

La solution liée mentionnée précédemment aide à:

https://github.com/evrone/quiet_assets

Aussi comme ci-dessous, cela fonctionne bien pour moi:

3.1 (uniquement) (3.2 casse avant_dipatch)

app\config\initializers\quiet_assets.rb

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def before_dispatch_with_quiet_assets(env)
    before_dispatch_without_quiet_assets(env) unless env['PATH_INFO'].index("/assets/") == 0
  end
  alias_method_chain :before_dispatch, :quiet_assets
end
3.2 Rails - Rack root tap approach
app\config\initializers\quiet_assets.rb

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end

-1

Dans config / environnements, ajoutez config.log_level = :erroraux fichiers .rb que vous souhaitez modifier. Cela modifiera les paramètres du journal en erreur uniquement.


Malheureusement non, car j'utilise principalement le journal pour consulter la demande et les données SQL qui sont au niveau du débogage. Les messages d'actif sont de niveau info (qui est inférieur au niveau de débogage), il est donc inutile d'obtenir ce que je veux avec ce paramètre.
istvanp

2
Ce n'est pas une bonne idée. Il masquera les autres messages de niveau d'informations que vous souhaiterez peut-être toujours enregistrer.
ifightcrime
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.