क्या लॉग 2नेट का उपयोग कर एक ही लॉग फ़ाइल में 2 एप्लिकेशन लिखना संभव है?log4net, क्या 2 अनुप्रयोग एक ही लॉग फ़ाइल में लिख सकते हैं?
उत्तर
वे कर सकते हैं, लेकिन यदि कोई एप्लिकेशन फ़ाइल लिख रहा है तो अन्य एप्लिकेशन को लॉग में लिखने की आवश्यकता होने पर भी एक त्रुटि का अनुभव होगा, क्योंकि इस तथ्य के कारण कि पहला एप्लिकेशन फ़ाइल लिखने के लिए खुला होगा । अपने अनुप्रयोगों के लिए समर्पित लॉगिंग स्रोत रखना हमेशा सर्वोत्तम होता है - यदि आपको लॉग साझा करने की आवश्यकता है, तो डेटाबेस का उपयोग करें क्योंकि यह समवर्ती लेखन को संभालने के लिए डिज़ाइन किया गया है।
यह उन चीजों में से एक है जो आपकी मशीन पर वास्तव में अच्छी तरह से काम करेंगे जब आप विकास कर रहे हैं क्योंकि आप किसी भी समस्या का ध्यान देने के लिए लॉग फ़ाइल में पर्याप्त समवर्ती लिखने की संभावना नहीं रखते हैं। एक बार जब आपका एप्लिकेशन अधिक लोड अनुभव करना शुरू कर देता है तो समस्या स्वयं दिखने लगती है और उस समय यह अजीब तरीके से प्रकट हो सकती है। मैं निश्चित रूप से एक और समाधान का प्रयास करेंगे।
यह FileAppender के LockingModel पर निर्भर करता है। यदि यह ExclusiveLock है तो दूसरी प्रक्रिया लेखन के लिए फ़ाइल नहीं खोल सकती है। विकल्प MinimalLock है, लेकिन यह इस उद्देश्य के लिए नहीं है। यह एक और प्रक्रिया को फ़ाइल को स्थानांतरित या हटाने की अनुमति देने के लिए है।
मिनिमलॉक आंशिक रूप से समस्या को हल करता है (जैसा कि @ मार्क उल्लेख किया गया है), लेकिन यदि आप रोलिंगफाइलएपेंडर का उपयोग कर रहे हैं, तो आप अन्य समस्याओं में भाग लेंगे। जब फ़ाइल रोल हो जाती है, तो आप खुद को दौड़ की स्थिति में पा सकते हैं जहां एक प्रक्रिया किसी अन्य प्रक्रिया की नव निर्मित लॉग फ़ाइल को ओवरराइट करती है।
अन्य विकल्पों में रिमोट लॉगर शामिल है, जहां आपके पास अन्य प्रक्रियाओं द्वारा भेजे गए लॉगिंग ईवेंट प्राप्त करने और रिकॉर्ड करने के लिए एक सरल सर्वर स्थापित है। इसी तरह, आप एक SQL डेटाबेस में लॉग कर सकते हैं। मैंने एक सरल जोड़ा जो रेडिस को लॉग करता है; आपको रेडिस से पढ़ने और फ़ाइल में रिकॉर्ड करने के लिए एक साधारण एप्लिकेशन की आवश्यकता होगी। इन दृष्टिकोणों के साथ समस्या यह है कि वे सभी विफलता का एक बिंदु पेश करते हैं। जब कुछ सही काम नहीं कर रहा होता है तो अक्सर आपको लॉग की आवश्यकता होती है, और फिर वे उपलब्ध नहीं हो सकते हैं।
तो मेरी समाधान अपने आप ही फाइल करने के लिए प्रत्येक प्रक्रिया लॉग होने से पूरी तरह समस्या से बचने के थे। कॉन्फ़िगरेशन में बदलाव के साथ यह करना आसान था। अपने (Rolling)FileAppender
विन्यास में, का उपयोग करें:
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
प्रक्रिया आईडी फ़ाइल नाम का हिस्सा बन जाता। हां, इसका मतलब है कि अब आपके पास कंघी करने के लिए कई लॉग फाइलें हैं, लेकिन ग्रे लॉग, स्प्लंक, या लॉगस्केप जैसे लॉग फ़ाइल एग्रीगेटर मदद कर सकते हैं।
या आप सामान्य संसाधन को लॉक करने के लिए म्यूटेक्स का उपयोग कर सकते हैं और इसलिए विभिन्न प्रक्रियाओं से सामान्य लॉग फ़ाइल तक पहुंच को सिंक्रनाइज़ करने के लिए उपयोग कर सकते हैं।
हाँ, यह के रूप में ऊपर कहा गया है, लेकिन मैं अब इस परिदृश्य में से कुछ तनाव परीक्षण किया है संभव है।
सेटअप काफी सरल है:
- वेब परियोजना 1 कि URL में एक ही प्रविष्टि + एक काउंटर के साथ एक बटन कि बंद एक ही पृष्ठ के लिए 1000 अनुरोध सेट, लॉग एक पेज के साथ सेट अप (लॉगिंग कथन द्वारा उठाया गया)।
- वेब प्रोजेक्ट 2 समान लॉग फ़ाइल के विरुद्ध समान रूप से सेट अप किया गया है।
जब दोनों बटन एक ही समय पर क्लिक किए जाते हैं, तो लॉग प्रविष्टियां पूरे लॉग में छेड़छाड़ की जाती हैं। लेकिन, और यह बड़ा गोचा है, साथ ही अनुरोध अनुरोध काउंटर द्वारा निर्णय ले रहा है, यह स्पष्ट है कि दौड़ की स्थिति है। लगभग हर बार एक वेब प्रोजेक्ट अपनी प्रविष्टि को लॉग इन करने में सफल होता है, दूसरा विफल रहता है (प्रवेश छोड़ दिया जाता है)।
तो, इस सामान्य लॉग के खिलाफ सभ्य यातायात के साथ, आपको मूल रूप से लॉग इन स्टेटमेंट लॉग में समाप्त होने की कोई गारंटी नहीं होगी। निष्कर्ष हमेशा परियोजना विशिष्ट लॉग फ़ाइलों के लिए है, ऐसा लगता है।
परीक्षण "मिनीमलॉक" के डिफ़ॉल्ट के साथ किया गया था। मैंने परीक्षण को "एक्सक्लूसिव लॉक" के साथ भी रेडिड किया है, केवल यह पता लगाने के लिए कि लॉगर को "जीता" कॉन्फ़िगर करने वाला पहला वेब प्रोजेक्ट, मूल रूप से लॉग इन करने के लिए अन्य सभी अनुरोधों को लॉक कर रहा है। तो जाहिर है, यह भी नहीं है।
- 1. क्या एकाधिक थ्रेड एक ही समय में फ़ाइल में डेटा लिख सकते हैं?
- 2. क्या हम एक फ़ाइल में हैशटेबल लिख सकते हैं?
- 3. एक ही लॉग-फ़ाइल
- 4. log4net गलत लॉग फ़ाइल नाम
- 5. क्या आप एक ही समय में एक सॉकेट इनपुट और आउटपुट स्ट्रीम लिख सकते हैं?
- 6. Log4Net स्वचालित रूप से लॉग फ़ाइलों को हटा सकते हैं?
- 7. क्या हम खुद को एक ईओएफ चरित्र लिख सकते हैं?
- 8. क्या आप [पीसी] पर लिख सकते हैं?
- 9. log4net - फ़ाइल
- 10. पढ़ सकते हैं और एक ही csv फ़ाइल
- 11. Log4Net RollingFileAppender कम वॉल्यूम लॉग
- 12. एक एएसपी.नेट एमवीसी 2 अनुप्रयोग मानचित्र में उप डोमेन के लिए क्षेत्र क्या कर सकते हैं?
- 13. संग्रहीत लॉग log4net
- 14. Log4Net उत्पादन में लॉग फ़ाइल क्यों नहीं बना रहा है?
- 15. Log4j एक साझा लॉग फ़ाइल में लॉगिंग
- 16. एक ही अनुप्रयोग में एकाधिक मास्टर पेज
- 17. क्या कई धागे एक साथ फाइल में लिख सकते हैं, यदि सभी धागे विभिन्न स्थानों पर लिख रहे हैं?
- 18. आवेदन% APPDATA% में नहीं लिख सकते हैं (लेकिन उपयोगकर्ता कर सकते हैं)
- 19. सी Syslog.h लॉग लिख नहीं
- 20. फ़ाइल या असेंबली 'log4net
- 21. log4net जेनेरिक विफलता। फ़ाइल
- 22. क्या आप एबीसीएल के साथ जावा क्लास लिख सकते हैं?
- 23. log4net प्रति फ़ाइल
- 24. एएसपीनेट: क्या मेरे पास बिन फ़ोल्डर में एक ही डीएलएल/असेंबली के 2 अलग-अलग संस्करण हो सकते हैं?
- 25. क्या आप सी # में सुंदरता के रूप में एक क्रमपरिवर्तन फ़ंक्शन लिख सकते हैं?
- 26. log4net में प्रोग्राम स्तर पर लॉग स्तर बदल रहा है?
- 27. मैं log4net लॉग फ़ाइल को कैसे साफ़ कर सकता हूं?
- 28. Log4Net
- 29. हम स्कैला में maven2 प्लगइन कैसे लिख सकते हैं?
- 30. समान अनुप्रयोग डेटा फ़ोल्डर में फ़ाइलें लिख
क्या किसी को इस विधि के बारे में साझा करने का अनुभव है? – SandRock