मैं अपने फेडोरा सिस्टम पर मेरी /var/log निर्देशिका में लॉग इन करने के लिए विंस्टन का उपयोग करने का एक तरीका खोजने के लिए 10 घंटे से अधिक समय से कोशिश कर रहा हूं लेकिन यह काम नहीं करता है।
मैंने केवल विंस्टन का परीक्षण करने के लिए एक्सप्रेस का उपयोग करके एक प्रोजेक्ट बनाया और जब मैंने अपनी प्रोजेक्ट निर्देशिका पर लॉगिंग करने का प्रयास किया तो यह ठीक काम करता है लेकिन जब '~' या '/' से शुरू होने पर कहीं भी लॉग इन करने की बात आती है तो यह फ़ाइल या लॉग नहीं बनाता है और कोई त्रुटि नहीं होती है या अपवाद फेंक दिया गया है, कृपया किसी भी मदद की सराहना की जाएगी।
मैं कई मंचों से गुजर चुका हूं और पता चला है कि यह एक नियमित समस्या है लेकिन मैंने एक वर्तमान नहीं देखा है, इसलिए मैं जानना चाहता हूं कि कोई समाधान है या नहीं।
2 जवाब
कैसे काम करें Winston
लकड़हारा अगर हम लॉग लिखने के लिए एक फ़ाइल पथ प्रदान करते हैं, तो यह उस फ़ाइल को उल्लिखित निर्देशिका में खोजेगा यदि मौजूद नहीं है तो उसी नाम से बनाएगा।
लेकिन यूनिक्स सिस्टम में ~/ डायरेक्टरी के प्रकार में कुछ लिखने के लिए अनुमति की आवश्यकता होती है। यदि आपका कंसोल जिसने त्रुटि फेंक दी है, तो आपको वह त्रुटि स्टैक नीचे की तरह निश्चित रूप से मिल जाएगा:
Error: EACCES: permission denied, open \'/var/log/your.log\
समाधान यह है: आप /var/log/your.log
फ़ाइल में फ़ाइल बना सकते हैं और फिर लिखने की अनुमति दे सकते हैं। sudo chmod a+w /var/log/your.log
.
हाँ यह आपकी परियोजना निर्देशिका में ठीक काम करेगा यहाँ किसी भी लेखन की अनुमति है, इसीलिए।
मैं इस निष्कर्ष पर पहुंचा कि स्टैकओवरफ्लो उपयोगकर्ता उस्मान गोनी नाहिद ने उल्लेख किया/सलाह दी कि मैन्युअल रूप से एक फ़ाइल बनाने का सबसे अच्छा तरीका है, उस फ़ाइल की अनुमतियों को एक्सेस करने के लिए बदलें और फिर इसे कोड में लिखें क्योंकि अगर विंस्टन के पास किसी फ़ोल्डर की अनुमति नहीं है, तो यह सिर्फ दूसरी प्रक्रिया चलाता है और फ़ाइल को बनाता या लिखता नहीं है, मेरे मामले में मैं एक बेहतर सुलभ स्थान के लिए गया था जहां पढ़ना और लिखना सुलभ था, इसलिए मैं अभी भी अपना स्वचालित बनाए रख सकता था फ़ाइल का निर्माण क्योंकि वह मेरी परियोजना में महत्वपूर्ण था।
आपकी सलाह के लिए लुकास एस और उस्मान गोनी नाहिद धन्यवाद !!
emit
उन्हें है, इसलिए आपको.on('error', console.error)
के साथ अपनी त्रुटियां प्राप्त करने में सक्षम होना चाहिए। और~
बैश जैसे कुछ टर्मिनलों के लिए विशिष्ट मान है।fs
को इसके बारे में पता नहीं है।.on
लॉगर इंस्टेंस लौटाता है, तो आपको इसे अलग-अलग लाइनों पर करना चाहिए:var logger = winston.createLogger({}); logger.on('error', err => /* do something */);