2010-12-29 7 views
5

मैं एसिंक्रोनस टीसीपी सर्वर (विशेष रूप से, एक एमयूडी सर्वर) बनाने के लिए अद्भुत AnyEvent का उपयोग कर रहा हूं।पर्ल के AnyEvent के तहत उपयोग करने के लिए कौन सा लॉगिंग मॉड्यूल?

आदेश सब कुछ सुचारू रूप से और कोड संभव के रूप में कुछ अवरुद्ध/तुल्यकालिक टुकड़ों के साथ चालू रखने के लिए में, मैं उदाहरण AnyEvent::Memcached और AnyEvent::Gearman के लिए, कुछ मॉड्यूल मैं उनके अतुल्यकालिक समकक्ष के साथ उपयोग कर रहा था जगह ले ली है। यह मुख्य कार्यक्रम को काफी तेज़ होने की अनुमति देता है, जो वांछनीय है। मैंने इनमें से कुछ कॉलों को तुल्यकालिक होने की आवश्यकता के आसपास कोड किया है।

वर्तमान में एक समस्या है, और इस प्रश्न का ध्यान लॉगिंग है।

इस सर्वर प्रोग्राम के लिए AnyEvent में जाने से पहले, मैं Log::Log4perl का उपयोग कर रहा था क्योंकि यह मुझे ठीक से ट्यून करने की अनुमति देता है कि कौन से मॉड्यूल या सबराउटिन लॉग किए जाने चाहिए, किस स्तर पर और किस लॉग आउटपुट (स्क्रीन, फ़ाइल इत्यादि)।

समस्या यह है कि लॉग 4perl क्रियाएं (चेतावनी, जानकारी, आदि) वर्तमान में सिंक्रनाइज़ रूप से निष्पादित की जाती हैं लेकिन मेरे पास तब तक कोई आवश्यकता नहीं है जब तक लॉग लाइन अंततः स्क्रीन/फ़ाइल (और सही क्रम में))।

लॉग है :: लॉग 4perl अभी भी एक एसिंक्रोनस इवेंट हैंडलर जैसे AnyEvent का उपयोग करते समय सही विकल्प है, या मुझे एक अलग मॉड्यूल को देखना चाहिए? यदि हां, तो किसकी सिफारिश की जाती है?

उत्तर

2

AnyEvent :: लॉग, जो AnyEvent के साथ आता है, AnyEvent :: IO का उपयोग करता है, जो IO :: AIO उपलब्ध होने पर सिंक्रनाइज़ रूप से फ़ाइलों को जोड़ता है (और जब सिंक्रनाइज़ नहीं होता है)।

2

आप क्या से बचने की कोशिश कर रहे हैं? यदि यह सिंक्रोनस फ़ाइल आईओ (फाइल/stdout लॉग करने के लिए लिखना आदि) है तो आपकी समस्या को आपके कोड में लॉग 4perl के सभी उपयोग को बदलने के बजाय असीमित और/या बफरिंग एपेंडर के साथ हल किया जाएगा।

Log::Log4perl::Appender::Buffer ऐसा लगता है कि यह एक अच्छी शुरुआत हो सकती है, लेकिन एक पूरी तरह से async appender अब मौजूद नहीं दिखता है।

+0

यह स्पष्ट करने के लिए धन्यवाद कि एक async appender मौजूद प्रतीत नहीं होता है – mfontani

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