Ruby on Rails üretim uygulamasında günlük rotasyonunu etkinleştirmenin en iyi yolu nedir?
Barındırma sunucusunda logrotate kullanarak mı yoksa günlükçü uygulamadan başlatırken kullanılacak bir dizi seçenek var mı?
Ruby on Rails üretim uygulamasında günlük rotasyonunu etkinleştirmenin en iyi yolu nedir?
Barındırma sunucusunda logrotate kullanarak mı yoksa günlükçü uygulamadan başlatırken kullanılacak bir dizi seçenek var mı?
Yanıtlar:
Rayları, sistem günlük araçlarını kullanmak üzere yapılandırabilirsiniz.
Config / environment / production.rb dosyasına bir örnek .
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
Bu şekilde, syslog'da oturum açarsınız ve günlükleri döndürmek için varsayılan logrotate araçlarını kullanabilirsiniz.
Başka bir seçenek de logrotate'i rayların bıraktığı günlükleri alacak şekilde yapılandırmaktır. Ubuntu ve Debian'da bu örneğin adlı bir dosyada olabilir /etc/logrotate.d/rails_example_com
.
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Aşağıdaki önerilere göre copytruncate
, Rails uygulamasında Rails uygulamasını yeniden başlatmak zorunda kalmamak için kullanılması tavsiye edilir .
Düzenleme: burada kullanılmadıkları ve yoruma göre sorunlara neden olduğu için "sharedscripts / endscript" kaldırıldı. Ve create 640 root adm
önerilen yorum başına kaldırıldı .
logrotate
Çözüm kullanılıyorsa, @ amit-saxena'nın cevabına değer - yönerge copytruncate
üzerinden kullanılmasını önerir create
.
copytruncate
, create
muhtemelen örneğin çıkarın bu yüzden, hiçbir etkisi yoktur
su your_rails_user your_rails_group
, günlük dosyalarınızın sahibine ve grubuna (örneğin, Raylar / Yolcu işlemindekiler) veya (??) Son sürümlerinin logosuna satır eklemeniz izinlerden şikayet edebilir.
Logrotate kullanıyorsanız, /etc/logrotate.d/ dizinine bir conf dosyası yerleştirerek aşağıda gösterilen seçeneklerden birini seçebilirsiniz.
# 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
}
Veya
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
Copytruncate öğesinin geçerli günlüğün yedek bir kopyasını oluşturduğunu ve daha sonra yazmaya devam etmek için günlük dosyasını temizlediğini lütfen unutmayın. Alternatif, geçerli dosyayı yeniden adlandırarak ve ardından eski dosyayla aynı ada sahip yeni bir günlük dosyası oluşturarak rotasyonu gerçekleştirecek olan create öğesini kullanmaktır. Oluşturmanız gerektiğini bilmiyorsanız copytruncate komutunu kullanmanızı kesinlikle öneririz . Nedeni, adı değişse bile Rails'in eski günlük dosyasını işaret etmeye devam edebilmesidir ve yeni günlük dosyasını bulmak için yeniden başlatılması gerekebilir. copytruncate, etkin dosyayla aynı dosyayı koruyarak bunu önler.
logrotate --force $CONFIG_FILE
el ile çalıştırmak için yapılandırma dosyasının konumunu belirterek çalıştırabilirsiniz.
Rails 5 için, günlük boyutunu sınırlamak ve konsoldaki sunucu çıktısını değiştirmek için yapmam gereken şey buydu:
Belgelere göre , günlük klasörünün boyutunu sınırlamak istiyorsanız, bunu ortam dosyanıza ('development.rb' / 'production.rb') koyun.
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
Bununla, günlük dosyalarınız hiçbir zaman 50 MB'den büyük olmayacaktır. Boyutu kendi tercihinize göre değiştirebilirsiniz. İkinci parametredeki '1', 1 tarihi günlük dosyasının saklanacağı anlamına gelir, böylece 100 MB'a kadar günlükünüz olur - geçerli günlük ve 50 MB'lık önceki yığın.
config.paths['log'].first
koymak istiyorumRails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
aynı 50 * 1024 * 1024
, ancak anlaşılması çok daha kolay. Daha fazla ayrıntı için ActiveSupport çekirdek uzantılarına bakın.
Rails.application.config.paths['log'].first
tam olarak bu dosyayı döndürürken döndüreceğini
Rails 5 için günlük kayıt rotasyonu istiyorsanız, sadece buna ihtiyacınız vardır:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
Belgelere göre daily
, weekly
veya kullanabilirsiniz monthly
.
Her günlük için: Rails günlüğü, Rpush günlüğü, ... Yapılandırma hizmet dosyanızda şu şekilde kullanabilirsiniz:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
Bu şu anlama gelir: sadece bir önceki günlük dosyasını bölmeden sonra kaydedin. Ana günlük boyutu asla 20 MB'ın üzerinde değildir.
Ortamlarım / production.rb dosyamda aşağıdaki gibi raylar günlükçüsünü kullanarak günlüklere günlük göndermeyi etkinleştir. rayların sürümü 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