web-dev-qa-db-fra.com

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

Les pignons ont tendance à être assez prolixes dans le journal (dev) par défaut sous 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)
...

J'aimerais 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 environment.rb ou development.rb similaire à config.active_record.logger = nil qui réduit au silence les instructions ActiveRecord SQL.

377
istvanp

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: fonctionne aussi pour Rails 3.2 aussi (une tentative précédente corrige before_dispatch, nous allons maintenant utiliser le rack racine call)

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

381
choonkeat

Jetez un oeil à https://github.com/evrone/quiet_assets et incluez-le dans votre Gemfile

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

188
route

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

53
ouranos

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

C'est tout!

28
Lisovsky Vlad

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

27
colinross

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 le documentation source :

Définir config.assets.logger sur false désactivera la journalisation des actifs servis.

Cependant, ce n'est probablement pas ce que vous pensez. Il désactive uniquement les journaux de service 'pignon' , pas les journaux Rails _ ActionPack. Le responsable Rails explique cela clairement ici: https://github.com/Rails/rails/issues/4569#issuecomment-35945


En prenant exemple sur le lien, les journaux comme celui-ci sont désactivés:

Actif servi /jquery.isotope.js - 304 non modifié (0ms)

Mais les journaux comme celui-ci ne sont pas

Ouverture de GET "/assets/jquery.isotope.js?body=1" pour 127.0.0.1 le 2012-01-20 23:16:46 -0500

12
lulalala

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

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

12
Sucrenoir
config.assets.quiet = true

C'est la dernière façon de faire.

10
Adam Waite
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 ajouté @choonkeat. Je viens d'inclure de travailler sous les fenêtres aussi.

7
Celso Dantas

dans development.rb, dans config/environment, vous trouverez la ligne config.assets.debug = true. Basculez-le sur false et la plus grande partie de la charge d'actifs sera supprimée. Sur mon système, seules les deux demandes pour application.css et .js sont conservées.

7
TKAB

Dans config/environnements/development.rb, veuillez ajouter:

config.assets.debug = false

config.assets.logger = false

Cela aidera à résoudre votre problème.

5
Najam Tariq

Lograge pour le gagnant- Il élimine les défauts par défaut de l'enregistreur de Rails (par exemple, la journalisation des actifs, la restitution du rendu partiel) , et est personnalisable si vous souhaitez ajouter/supprimer des éléments spécifiques.

2
Yarin

La solution de lien mentionnée ci-dessous aide à:

https://github.com/evrone/quiet_assets

Aussi comme ci-dessous cela fonctionne bien pour moi

3.1 (seulement) (3.2 sauts 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 
0
Sumit Munot