Bagaimana saya bisa menonaktifkan logging pesan pipeline aset (sprocket) di Ruby on Rails 3.1?


378

Sprockets cenderung sangat bertele-tele dalam log (dev) secara default di bawah 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)
...

Saya ingin mengurangi tingkat verbositas atau menonaktifkannya sama sekali.

Saya berasumsi ada cara bersih untuk menonaktifkan atau mengurangi verbositas dari logging dengan menambahkan baris config di salah satu environment.rbatau development.rbmirip dengan config.active_record.logger = nilyang membungkam pernyataan SQL ActiveRecord.


Seseorang melaporkan bug tentang ini: # 2639 . Masih "terbuka" pada 9/2.
istvanp

14
Jawaban yang diterima untuk pertanyaan ini harus diubah atau diperbarui. Di Rails 3.2 Anda bisa memasukkan config.assets.debug = falsedevelopment.rb.
Stewart Johnson

7
@StewartJohnson - config.assets.debug = falseakan menyatukan aset ke dalam satu file - bukan yang diinginkan kebanyakan orang dalam pengembangan
Yarin

Jawaban:


382

Masukkan kode berikut ini 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

Diperbarui: Sekarang juga berfungsi untuk Ruby on Rails 3.2 (perbaikan upaya sebelumnya before_dispatch, dan sekarang kami akan menggunakan rak root callsebagai gantinya)

Pembaruan: Solusi rak middleware yang tepat (bukan rapuh alias_method_chain) dari @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735


3
Pada Rails 3.2.1 tarikan itu sendiri tidak memadamkan sproket logging dan file choonkeat masih diperlukan.
IAmNaN

5
Memang. Kedengarannya file ini akan selalu dibutuhkan, karena pengaturan config.assets.loggerke false hanya akan membungkam apa yang dihasilkan Sprockets. Paket Tindakan ini membungkam permintaan / tanggapan, yang merupakan sesuatu yang dikatakan Rails dev tidak berniat diam untuk kasus-kasus khusus .
Ben Kreeger

32
uhm Anda hanya harus mendapatkan ini ke inti rel. menjadikannya pilihan di config.assets
jsharpe

2
Pada windows ganti '/dev/null'dengan ' NUL'
Matt

4
Bekerja untuk saya di Rails 4.2.0
mesin serial

189

Lihatlah https://github.com/evrone/quiet_assets dan cukup sertakan ke dalam file Gem Anda.

Untuk yang malas: gem 'quiet_assets', group: :development


6
Kerja bagus, tetapi sangat sedih bahwa permata terpisah diperlukan untuk ini.
Adam Spires

1
Saya pikir Jose Valim membuat keputusan yang tepat di sini github.com/rails/rails/issues/2639 rails harus mencatat semua permintaan yang masuk dan saya setuju dengan itu, saya pikir kita bisa menyingkirkan overhead ini ketika sprocket akan mendukung peta sumber github.com / sstephenson / sprockets / issues / 310
route

5
untuk yang malas: gem 'quiet_assets'(silakan tambahkan ini ke posting :))
reto

52

Untuk Ruby on Rails 3.2, tambahkan config.assets.logger = falseke file konfigurasi lingkungan pengembangan Anda, biasanya ditemukan di config/environments/development.rb. Lihat # 4512 .


Bekerja di Naikkan 4 seperti yang diharapkan. Diperlukan untuk me-restart server untuk membuatnya berfungsi.
Langusten Gustel

2
Rails 4.0.2 config.assets.logger = nilbekerja untuk saya
byterussia

4
Rails 4.0.4 config.assets.logger = nilTIDAK bekerja untuk saya
hendrikbeck

28

Dua hal sudah cukup:

  1. config.assets.debug = false di config/enviroments/development.rb
  2. rake assets:precompile. Lihat komentar oleh @oma di bawah ini; ini tidak diperlukan

Itu saja!


19
1. benar. Terima kasih! Harap hapus No 2. rake assets:precompilebukan sesuatu yang ingin kami lakukan dalam pengembangan
oma

Meskipun ini mungkin tidak berfungsi pada saat pertanyaan aslinya diposting, ia berfungsi sekarang (dan, seperti yang @Race nyatakan, sudah 3.2) dan seharusnya jawabannya sekarang diterima.
radiospiel

2
Seperti yang ditunjukkan istvanp di bawah ini, itu tidak melakukan apa yang Anda pikirkan. Ini hanya mengkompilasi semua aset JS dan CSS menjadi satu file besar - tidak mematikan pencatatan untuk aset.
davidgoli

2
Ini semua yang diperlukan di kereta 4.2.2
kapal ini

Menambahkan apa yang dikatakan @davidgoli: config.assets.debug mengontrol penggabungan aset. Mematikan itu berarti bahwa debugging misalnya JS dan CSS menggunakan browser akan menjadi lebih banyak pekerjaan. Sesuatu seperti quiet_assets akan memadamkan pencatatan tanpa menyebabkan Anda harus beralih aset.
johncip

27

Pada akhirnya, itu akan terjadi config.assets.logger = nil, tetapi bagian itu saat ini masih belum dibaca di master (belum selesai).


5
Tidak bekerja untuk saya di Rails 3.1.3. @nessur: Anda yakin itu bekerja untuk Anda? Seperti yang dikatakan Tim, # 2639 masih terbuka, dan saya tidak melihat indikasi dalam masalah perbaikan apa pun (kedua permintaan tarikan yang direferensikan ditolak).
Adam Spires

Ini tidak akan diimplementasikan sebagai tahap ini. github.com/rails/rails/issues/4569
23inhouse

@AdamSpiers sesuai tautan: github.com/rails/rails/pull/3795#issuecomment-3549669 "Rails tidak akan membuat case khusus salah satu penebang atau middlewares terkait logger untuk tidak mencatat rute tertentu"
23inhouse

3
Kekecewaan. Rails 4 masih tidak dapat dengan mudah menonaktifkan logging aset.
Tom Rossi

1
Saya menggunakan Rails 4.2, memasukkan ini ke saya development.rb, dan itu menonaktifkan logging aset.
Jack

12

Saya tahu ini solusi yang jelek dan sementara, tetapi saya menggunakan ini:

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


9
Inilah yang diperbaiki yang menghilangkan garis-garis kosong juga:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

Banyak orang bingung tentang penggunaan config.assets.logger = false. Inilah yang dilakukan dan tidak dilakukan.

Menurut sumber dokumentasi :

Pengaturan config.assets.loggerke false akan mematikan pencatatan aset yang dilayani.

Namun ini mungkin bukan apa yang Anda pikirkan. Ini hanya menonaktifkan log 'penayangan' sprocket , bukan log permintaan actionpack Ruby on Rails. Pengelola Ruby on Rails menjelaskan hal ini dengan jelas di sini: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Mengambil contoh dari tautan, log seperti ini dinonaktifkan:

Aset yang dilayani /jquery.isotope.js - 304 Tidak Dimodifikasi (0ms)

Tapi log seperti ini bukan

Mulai DAPATKAN "/assets/jquery.isotope.js?body=1" untuk 127.0.0.1 di 2012-01-20 23:16:46 -0500


10
config.assets.quiet = true

Ini cara terbaru untuk pergi.


Berfungsi sempurna di Rails 5. Hanya buang ini ke dalamdevelopment.rb
Andreykul

Ditambah dengan debug, tidak menyelesaikan semua kebutuhan saya di Rails 5.
Pysis

7

Menggunakan:

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

Ini adalah kode choonkeat yang sama ditambahkan . Saya hanya memasukkannya untuk bekerja di bawah Windows juga.


7

Dalam file development.rb di config / environment Anda akan menemukan baris tersebut config.assets.debug = true.

Alihkan itu ke falsedan sebagian besar output beban aset akan hilang. Di sistem saya hanya dua permintaan, untuk application.css dan .js, yang tersisa.


3
Pengaturan itu hanya memungkinkan Anda untuk memecah stylesheet dan javascript ke dalam file terpisah ketika disetel ke true untuk memudahkan debugging. Jika disetel ke false (default), bundel semuanya menjadi satu file besar. Jadi memang mengurangi output debug tetapi jika Anda memiliki gambar misalnya, mereka tidak terpengaruh sama sekali. Info panduan resmi di sini .
istvanp

1
Saya melihat. Terima kasih sudah membereskannya. Tapi saya tidak mengubah pengaturan variabel ini, jadi standar saya adalah true.
TKAB

5

Dalam file config / environment / development.rb silakan tambahkan:

config.assets.debug = false

config.assets.logger = false

2

Lograge untuk menang - ini akan meniadakan default logger yang mengganggu Ruby on Rails (misalnya, mencatat aset, mencatat rendering sebagian) dan dapat disesuaikan jika Anda ingin menambah / menghapus item tertentu.


0

Solusi tertaut yang disebutkan sebelumnya membantu:

https://github.com/evrone/quiet_assets

Juga seperti di bawah ini, itu berfungsi dengan baik untuk saya:

3,1 (hanya) (3,2 jeda sebelum_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

Dalam config / environment, tambahkan config.log_level = :errorke file .rb yang ingin Anda ubah. Ini akan mengubah pengaturan log menjadi kesalahan saja.


Sayangnya tidak karena saya kebanyakan menggunakan log untuk melihat data permintaan dan SQL yang berada di tingkat debug. Pesan aset adalah tingkat info (yang lebih rendah dari tingkat debug) sehingga tidak ada gunanya mendapatkan apa yang saya inginkan dengan pengaturan itu.
istvanp

2
Ini bukan ide yang bagus. Ini akan menyembunyikan pesan level info lain yang Anda mungkin ingin tetap login.
ifightcrime
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.