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?
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?
Jawaban:
Anda dapat mengkonfigurasi rel, untuk menggunakan alat log sistem.
Contoh di config / environment / production.rb .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Dengan begitu, Anda masuk ke syslog, dan dapat menggunakan alat logrotate default untuk memutar log.
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
.
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
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.
logrotate
solusi, ada baiknya jawaban @ amit-saxena - menyarankan penggunaan copytruncate
lebih dari create
arahan.
copytruncate
, create
tidak memiliki efek, jadi Anda mungkin harus menghapusnya dari contoh Anda
su 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/.
# Rotate Rails application logs based on file size
# Rotate log if file greater than 20 MB
/path/to/your/rails/applicaton/log/*.log {
size=20M
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Atau
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
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.
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').
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
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.
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 dengan 50 * 1024 * 1024
, tetapi jauh lebih mudah dipahami. Lihat ekstensi inti ActiveSupport untuk detail lebih lanjut.
Rails.application.config.paths['log'].first
pengembalian tepat file ini
Untuk Rails 5 , jika Anda menginginkan rotasi log harian, Anda hanya perlu ini:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Menurut dokumentasi , Anda dapat menggunakan daily
, weekly
atau monthly
.
Untuk setiap log: Log rel, Rpush log, ... Anda dapat menggunakan seperti ini di file layanan config Anda:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Artinya: hanya menyimpan 1 file log sebelumnya setelah dipisah. Ukuran log utama tidak pernah lebih dari 20 MB.
Aktifkan untuk mengirim log ke loggly menggunakan logglier rails seperti berikut dalam file environment / production.rb saya. versi rel adalah 4.1.0
RailsApplication::Application.configure do
require 'logglier'
config.logger = Logglier.new(<https://logs-01.loggly.com/inputs/inputkey>)
log.info("hello from logglier")
end