रूबी प्रोडक्शन ऐप पर एक रूबी पर लॉग रोटेशन को सक्षम करने का सबसे अच्छा तरीका क्या है?
यह होस्टिंग सर्वर पर logrotate का उपयोग करके या अनुप्रयोग से लकड़हारा शुरू करते समय उपयोग करने के लिए विकल्पों का एक सेट है?
रूबी प्रोडक्शन ऐप पर एक रूबी पर लॉग रोटेशन को सक्षम करने का सबसे अच्छा तरीका क्या है?
यह होस्टिंग सर्वर पर logrotate का उपयोग करके या अनुप्रयोग से लकड़हारा शुरू करते समय उपयोग करने के लिए विकल्पों का एक सेट है?
जवाबों:
आप सिस्टम लॉग टूल का उपयोग करने के लिए रेल को कॉन्फ़िगर कर सकते हैं।
विन्यास / वातावरण / उत्पादन में एक उदाहरण ।
# Use a different logger for distributed setups
config.logger = SyslogLogger.new
इस तरह, आप syslog में लॉग इन करते हैं, और लॉग को घुमाने के लिए डिफ़ॉल्ट लॉगोटेट टूल का उपयोग कर सकते हैं।
एक अन्य विकल्प केवल लॉग लॉग को रेल द्वारा छोड़े गए लॉग को लेने के लिए कॉन्फ़िगर करना है। उबंटू और डेबियन पर, उदाहरण के लिए, नामक एक फ़ाइल में होगा /etc/logrotate.d/rails_example_com
।
/path/to/rails.example.com/tmp/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
नीचे दिए गए सुझावों के अनुसार, रेल में, सलाह दी जाती है copytruncate
कि रेल एप्लिकेशन को पुनः आरंभ करने से बचें।
संपादित करें: हटाए गए "साझाकरण / एंडस्क्रिप्ट" चूंकि वे यहां उपयोग नहीं किए गए हैं और टिप्पणी के अनुसार समस्याएं पैदा करते हैं। और create 640 root adm
सुझाव के अनुसार हटा दिया गया।
logrotate
समाधान का उपयोग किया जाता है, तो यह @ amit-saxena के जवाब के लायक है - निर्देश copytruncate
पर उपयोग का सुझाव देता है create
।
copytruncate
, create
तो कोई प्रभाव नहीं पड़ता है, इसलिए आपको संभवतः इसे अपने उदाहरण से हटा देना चाहिए
su your_rails_user your_rails_group
अपनी लॉग फ़ाइलों के स्वामी और समूह (यानी, उन रेल / यात्री प्रक्रिया के) या (हाल के संस्करणों के साथ) को जोड़ने की आवश्यकता हो सकती है, लॉगोटोट अनुमतियों के बारे में शिकायत कर सकते हैं।
यदि आप लोगरोट का उपयोग कर रहे हैं तो आप नीचे दिए गए विकल्पों में से किसी एक को /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
}
या
# Rotate Rails application logs weekly
/path/to/your/rails/applicaton/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}
कृपया ध्यान दें कि copytruncate वर्तमान लॉग की एक बैकअप प्रतिलिपि बनाता है और फिर निरंतर लेखन के लिए लॉग फ़ाइल को साफ़ करता है। वैकल्पिक उपयोग यह है कि वर्तमान फ़ाइल का नाम बदलकर और फिर पुरानी फ़ाइल के समान नाम के साथ एक नई लॉग फ़ाइल बनाकर रोटेशन का प्रदर्शन किया जाएगा। मैं दृढ़ता से सलाह देता हूं कि जब तक आप जानते हैं कि आपको बनाने की आवश्यकता नहीं है, तब तक आप कॉपीरुनेट का उपयोग करें। इसका कारण यह है कि रेल अभी भी पुरानी लॉग फ़ाइल की ओर संकेत कर सकती है, भले ही उसका नाम बदल गया हो और उन्हें नई लॉग फ़ाइल का पता लगाने के लिए पुनः आरंभ करने की आवश्यकता हो सकती है। कॉपीरुनेट सक्रिय फ़ाइल के समान फ़ाइल रखकर इससे बचता है।
logrotate --force $CONFIG_FILE
इसे मैन्युअल रूप से चलाने के लिए config फ़ाइल स्थान निर्दिष्ट करके चला सकते हैं।
रेल 5 के लिए, यह वही है जो मुझे लॉग साइज को सीमित करने के लिए करना था और कंसोल में सर्वर आउटपुट को नहीं बदलना चाहिए:
प्रलेखन के अनुसार , यदि आप लॉग फ़ोल्डर के आकार को सीमित करना चाहते हैं, तो इसे अपने पर्यावरण-फ़ाइल ('development.rb' / 'production.rb') में डालें।
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)
इसके साथ, आपकी लॉग फाइलें कभी भी 50Mb से बड़ी नहीं होंगी। आप अपनी पसंद के अनुसार आकार बदल सकते हैं। दूसरे पैरामीटर में '1' का अर्थ है कि 1 ऐतिहासिक लॉग फ़ाइल रखी जाएगी, इसलिए आपके पास 100Mb लॉग तक - वर्तमान लॉग और 50Mb का पिछला हिस्सा होगा।
config.paths['log'].first
मैं Rails.root.join('log', "#{Rails.env}.log")
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
50.megabytes
जैसा है 50 * 1024 * 1024
, लेकिन समझने में बहुत आसान है। देखें ActiveSupport कोर एक्सटेंशन अधिक जानकारी के लिए।
Rails.application.config.paths['log'].first
वापसी वास्तव में इस फाइल
के लिए रेल 5 , यदि आप दैनिक लॉग रोटेशन चाहते हैं, आप केवल इस की जरूरत है:
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, shift_age = 'daily')
प्रलेखन के अनुसार , आप उपयोग कर सकते हैं daily
, weekly
या monthly
।
प्रत्येक लॉग के लिए: रेल लॉग, Rpush लॉग ... ... आप अपनी सेवा की कॉन्फ़िगरेशन फ़ाइल में इस तरह का उपयोग कर सकते हैं:
config.log_file = 'log/rpush.log'
config.logger = ActiveSupport::Logger.new(config.log_file, 1, 20*1024*1024)
इसका मतलब है: विभाजन के बाद केवल 1 पिछली लॉग फ़ाइल को सहेजें। मुख्य लॉग आकार कभी भी 20 एमबी से अधिक नहीं होता है।
मेरे वातावरण / उत्पादन में निम्नलिखित लॉग के रूप में लॉग का उपयोग करके लॉग भेजने में सक्षम करें। रेल संस्करण 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