2013-06-10 2 views
5

मैं लगातार कुछ सर्वर स्क्रिप्ट (विभिन्न बंदरगाहों पर) निरंतर उपयोग करके नोडज के साथ चल रहा हूं।हमेशा के लिए चल रहे node.js स्क्रिप्ट में लॉगिंग अक्षम करें

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

मेरे सिस्टम पर किसी और ने मेरे ज्ञान के बिना प्रत्येक सर्वर के लिए सेट की गई लॉग फ़ाइलों को हटा दिया। कमांड लाइन पर कॉलिंग को कॉल करने से पता चलता है कि सर्वर स्क्रिप्ट अभी भी चल रही हैं लेकिन अब मैं लॉग फाइलों को पूंछ नहीं कर सकता यह देखने के लिए कि नोड्स कैसे कर रहे हैं।

नोड डाउनटाइम को न्यूनतम से कम रखा जाना चाहिए, इसलिए कुछ मिनटों से अधिक समय तक सर्वर को रोकने के लिए मुझे संकोच नहीं है। क्लाइंट साइड से शुरुआती परीक्षण यह इंगित करता है कि स्क्रिप्ट ठीक काम कर रही हैं, लेकिन मैं 100% सुनिश्चित नहीं कर सकता कि किसी भी त्रुटि फ़ाइल पर लॉग इन करने में विफल प्रयासों के कारण कोई त्रुटि नहीं है।

मैं कुछ सवाल वास्तव में है:

  1. इसे हमेशा के लिए इस तरह चालू रखने के लिए ठीक है?
  2. यदि नहीं, तो क्या उचित लॉगिंग अक्षम करने का तरीका है? github repository इंगित करता है कि हमेशा के लिए एक डिफ़ॉल्ट फ़ाइल पर लॉग इन होगा, जो मैं नहीं चाहता। अन्यथा मैं सिर्फ एक cronjob लिख सकता हूं जो समय-समय पर स्क्रिप्ट रोकता है, लॉग छंटनी करता है, फिर स्क्रिप्ट को पुनरारंभ करता है।
  3. क्या होता है यदि मैं सिर्फ जैसे कुछ लॉगफाइल बना देता हूं, तो logfile_name.log स्पर्श करें जबकि स्क्रिप्ट अभी भी चल रही है - क्या यह हमेशा के लिए सनकी हो जाएगी या यह एक व्यावहारिक समाधान है?

आपके समय के लिए धन्यवाद।

+1

+1। – verybadalloc

+1

क्या आपने कुछ लॉगिंग सिस्टम की तरह कुछ लागू करने पर विचार किया है? सीधे console.log को कॉल करने के बजाय, एक रैपर फ़ंक्शन (या एक लाइब्रेरी का उपयोग करें) लिखें जो आपको न केवल एक संदेश, बल्कि एक लॉगिंग स्तर असाइन करने की अनुमति देता है, और उसके बाद आपके कॉन्फ़िगरेशन के आधार पर, केवल आउटपुट लॉग जो कि हैं कुछ महत्व या अधिक। मैं कहूंगा कि लॉगिंग अक्षम करने का "उचित" तरीका है। –

+0

@ ब्रेट मैं अब उस कंपनी में काम नहीं करता हूं, लेकिन यही वह है जो मैंने लॉगिंग के विभिन्न स्तरों को बनाते हुए किया। इसने फ़ाइलों को इतना छोटा रखा कि स्क्रिप्ट को पुनरारंभ करने से पहले लॉग को साफ़ करने के लिए शायद ही कभी रोकना पड़ा। – Cubis

उत्तर

1

एक निफ्टी उपकरण है जो लॉग्रोटेट नामक आपकी मदद कर सकता है। एक नज़र देखें here

विशेष रूप से copytruncate विकल्प, यह आपके मामले में बहुत उपयोगी है।

2

https://github.com/foreverjs/forever के अनुसार, सभी लॉग को चुप करने के लिए पास करने का प्रयास करें।

forever -s start YOURSCRIPT

निश्चित रूप से, ऐसा करने से पहले, नवीनतम करने के लिए हमेशा के लिए अद्यतन करने के लिए प्रयास करें:

sudo curl -L https://npmjs.com/install.sh | sudo sh

sudo npm update -g

+1

-s console.logs को दबा नहीं देता है। –

1

1) हमेशा के लिए हमेशा के लिए लॉग को साफ़ करने के लिए एक आवधिक कार्य या व्यवस्थापक विकल्प में निर्माण करें। मैनुअल से forever cleanlogs

2) कम से कम लिनक्स के लिए। प्रत्येक लॉग फ़ाइल को /dev/null पर भेजें। प्रत्येक लॉग प्रकार विकल्प -l-o और -r द्वारा निर्दिष्ट किया गया है। append log के लिए विकल्प, यह पहले से मौजूद लॉग के बारे में शिकायत कर देगा।

forever start -a -l /dev/null -o /dev/null -r /dev/null your-server.js 

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

संबंधित मुद्दे