Apa cara terbaik untuk mengaktifkan rotasi log pada aplikasi produksi Ruby on Rails?
Apakah dengan menggunakan logrotate di server hosting atau apakah ada serangkaian opsi untuk digunakan saat menginisialisasi logger dari aplikasi?
ruby-on-rails
logging
production-environment
Cnicolaou
sumber
sumber
Jawaban:
Opsi 1: syslog + logrotate
Anda dapat mengkonfigurasi rel, untuk menggunakan alat log sistem.
Contoh di config / environment / production.rb .
Dengan begitu, Anda masuk ke syslog, dan dapat menggunakan alat logrotate default untuk memutar log.
Opsi 2: log Rails normal + logrotate
Pilihan lain adalah cukup mengkonfigurasi logrotate untuk mengambil log yang ditinggalkan oleh rel. Di Ubuntu dan Debian, misalnya, dalam file bernama
/etc/logrotate.d/rails_example_com
.Sesuai saran di bawah ini, di Rails disarankan untuk digunakan
copytruncate
, untuk menghindari keharusan me-restart aplikasi Rails.Sunting: dihapus "sharedscripts / endscript" karena tidak digunakan di sini dan menimbulkan masalah sesuai komentar Dan dihapus
create 640 root adm
sesuai komentar yang disarankan.sumber
logrotate
solusi, ada baiknya jawaban @ amit-saxena - menyarankan penggunaancopytruncate
lebih daricreate
arahan.copytruncate
,create
tidak memiliki efek, jadi Anda mungkin harus menghapusnya dari contoh Andasu your_rails_user your_rails_group
dengan pemilik dan grup file log Anda (yaitu, orang-orang dari proses Rails / Penumpang) atau (versi terbaru?) Logrotate dapat mengeluh tentang izin.Jika Anda menggunakan logrotate maka Anda dapat memilih salah satu opsi yang ditunjukkan di bawah ini dengan menempatkan file conf di direktori /etc/logrotate.d/.
Atau
Harap dicatat bahwa copytruncate membuat salinan cadangan dari log saat ini dan kemudian menghapus file log untuk penulisan selanjutnya. Alternatifnya adalah menggunakan create yang akan melakukan rotasi dengan mengganti nama file saat ini dan kemudian membuat file log baru dengan nama yang sama dengan file lama. Saya sangat menyarankan Anda menggunakan copytruncate kecuali Anda tahu bahwa Anda perlu membuat. Alasan mengapa Rails masih tetap menunjuk ke file log lama meskipun namanya telah berubah dan mereka mungkin perlu memulai ulang untuk menemukan file log baru. copytruncate menghindari ini dengan menjaga file yang sama dengan file yang aktif.
sumber
logrotate --force $CONFIG_FILE
dengan menentukan lokasi file konfigurasi untuk menjalankannya secara manual.Untuk Rails 5, inilah yang harus saya lakukan untuk membatasi ukuran log dan tidak mengubah output server di konsol:
Menurut dokumentasi , jika Anda ingin membatasi ukuran folder log, letakkan ini di file lingkungan Anda ('development.rb' / 'production.rb').
Dengan ini, file log Anda tidak akan pernah tumbuh lebih besar dari 50 MB. Anda dapat mengubah ukuran sesuai keinginan Anda. Tanda '1' pada parameter kedua berarti bahwa 1 file log historis akan disimpan, sehingga Anda akan memiliki hingga 100 MB log - log saat ini dan potongan sebelumnya 50 MB.
Sumber untuk solusi ini .
sumber
config.paths['log'].first
saya menempatkanRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
sama dengan50 * 1024 * 1024
, tetapi jauh lebih mudah dipahami. Lihat ekstensi inti ActiveSupport untuk detail lebih lanjut.Rails.application.config.paths['log'].first
pengembalian tepat file iniUntuk Rails 5 , jika Anda menginginkan rotasi log harian, Anda hanya perlu ini:
Menurut dokumentasi , Anda dapat menggunakan
daily
,weekly
ataumonthly
.sumber
Untuk setiap log: Log rel, Rpush log, ... Anda dapat menggunakan seperti ini di file layanan config Anda:
Artinya: hanya menyimpan 1 file log sebelumnya setelah dipisah. Ukuran log utama tidak pernah lebih dari 20 MB.
sumber
Aktifkan untuk mengirim log ke loggly menggunakan logglier rails seperti berikut dalam file environment / production.rb saya. versi rel adalah 4.1.0
sumber