2009-06-24 12 views
13

मेरे पास एक डिमन है जो लॉग फ़ाइल (development.log या production.log) को बहुत तेज़ी से भरता है जो लगातार चलता है। कुछ आकार के बाद लॉग फ़ाइल को हटाने या निश्चित दिन से पहले हिस्से को हटाने का सबसे अच्छा तरीका क्या है।कुछ आकार के बाद रेल लॉग फ़ाइल को कैसे हटाएं

+1

आपको यह पता लगाने के लिए अपनी खोज को संपादित करना चाहिए कि आप किस ओएस पर चल रहे हैं, और कुछ और टैग भी जोड़ें, क्योंकि यह रा से अधिक ओएस विशिष्ट है विशिष्ट ils। –

+0

प्रश्न विशेष रूप से लॉग रोटेशन का अनुरोध करने का प्रश्न: http://stackoverflow.com/questions/4883891/ruby-on-rails-production-log-rotation/4883967#4883967 –

उत्तर

12

लॉग रोटेशन सेट अप करने का सबसे अच्छा तरीका है, लेकिन आप यह कैसे करते हैं, यह बहुत ही प्लेटफार्म निर्भर है, ताकि आपको विकास और उत्पादन दोनों के लिए उपयोग करने के बारे में एक टिप्पणी जोड़नी चाहिए।

/path/to/rails_root_for_app/log/production.log { 
    daily 
    missingok 
    rotate 7 
    compress 
    delaycompress 
    notifempty 
    create 640 capistrano capistrano 
} 

यह एक में लॉग चले जाएँगे:

लिनक्स पर चल रहा हमारे क्षुधा के लिए, हम एक फ़ाइल प्रत्येक एप्लिकेशन के लिए /etc/logrotate.d/appname, कि कुछ इस तरह दिखता है दिन में एक बार नई फाइल, पिछले 7 दिनों के प्रत्येक के लिए संपीड़ित बैकअप फ़ाइल रखना।

तुम सिर्फ जबकि डेमॉन चल रहा है उस में डेटा के किसी भी रखने के बिना फ़ाइल खाली करने के लिए चाहते हैं, तो बस एक खोल से ऐसा करते हैं:

> /path/to/rails_root_for_app/log/development.log 

इस 0 बाइट्स लंबाई करने के लिए फ़ाइल काटना होगा ।

0

या आप प्रवेश करने के लिए syslog

13
config.logger = Logger.new(config.log_path, 50, 1.megabyte) 

प्रतिनिधि लेकिन सावधान रहना है कि एकाधिक mongrels इस के साथ मुद्दों हो सकता है कर सकते हैं।

+1

सख्ती से रेल के विशिष्ट बिंदु से यह सबसे सही उत्तर है । –

+0

50 के लिए क्या खड़ा है? – Vinozio

+0

50 का अर्थ है 50 फाइलें। Shift_age देखें http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html#method-c-new – Kirk

1

या इससे भी बेहतर, यदि आपके सभी वातावरण मैक या लिनक्स पर हैं, और/usr/sbin/rotatelogs हैं, तो बस इसका उपयोग करें। यह अधिक लचीला है, और इसमें डेटा हानि समस्या नहीं है जो लॉग्रोटेट है (भले ही आप copytruncate का उपयोग करें)।

इस अंदर config/application.rb जोड़े (या बस config/वातावरण/production.rb अगर आप केवल prod में रोटेशन चाहते हैं):

log_pipe = IO.popen("/usr/sbin/rotatelogs #{Rails.root}/log/#{Rails.env}.%Y%m%d.log 86400", 'a') 
config.logger = Logger.new(log_pipe) 

(this blog post से)

2

मैं एक मासिक पसंद करते हैं मेरे उत्पादन.आरबी फ़ाइल में लॉग फ़ाइल

config.logger = Logger.new(config.log_path, 'monthly') 
संबंधित मुद्दे