2014-04-09 11 views
5

दूसरा संपादन: खोदने के बाद, स्थानीय चर के साथ अपवाद को लॉग करने के तरीके से प्रश्न बदल गया कि सेलेरी को दूसरे लॉग संदेश भेजने से कैसे रोकें, स्थानीय युद्ध हैं। नीचे दिए गए प्रयास के बाद, मैंने वास्तव में देखा कि मुझे हमेशा 2 ईमेल प्राप्त हुए थे, एक स्थानीय पाठ प्रति फ्रेम के साथ और दूसरा बिना।एक सेलेरी कार्य से डुप्लिकेट अपवाद लॉगिंग को कैसे रोकें

पहले संपादित करें: annotations (का उपयोग कर मैं, एक तरह से स्थानीय चर पाने के लिए प्रबंधित किया है ओवरराइड on_failure एक कस्टम जोड़कर तो जैसे सभी कार्यों के लिए:

def include_f_locals(self, exc, task_id, args, kwargs, einfo): 
    import logging 
    logger = logging.getLogger('celery') 
    logger.error(exc, exc_info=einfo) 

CELERY_ANNOTATIONS = {'*': {'on_failure': include_f_locals}} 

लेकिन समस्या यह है कि अब है त्रुटि आता है 3 बार, एक बार अजवाइन लकड़हारा के माध्यम से और दो बार जड़ के माध्यम से (हालांकि मैं प्रचार नहीं कर रहा हूँ मेरी लॉगिंग सेटिंग में 'अजवाइन' लकड़हारा)

मूल प्रश्न: मैं क एक Django/अजवाइन परियोजना है ich मैंने हाल ही में एक 'हैगर' स्तर के साथ रूट लॉगर के रूप में एक संभाल हैंडलर जोड़ा है। सेलेरी श्रमिकों से आने वाले लोगों को छोड़कर, यह डीजेंगो में होने वाली अधिकांश त्रुटियों और अपवादों के लिए ठीक काम करता है।

क्या होता है कि संतरी ट्रैस बैक और डेमॉन के स्थानीय लोगों के साथ एक अपवाद प्राप्त करता है, लेकिन ढेर में प्रत्येक फ्रेम के f_locals (स्थानीय वार्स) को शामिल नहीं करता है। और ये सामान्य पायथन/django अपवादों में दिखाई देते हैं।

मुझे लगता है कि मैं सभी अपवादों को पकड़ने और मैन्युअल रूप से exc_info के साथ लॉग इन करने का प्रयास कर सकता हूं। लेकिन यह आदर्श से कम है।

उत्तर

0

बहुत मजेदार है, जब मैंने 5.012 (विशेष रूप से 5.1 के बाद) के संस्करण में raven को एक संस्करण में अपग्रेड किया तो मेरी सभी परेशानी दूर हो गईं।

जबकि मुझे यकीन है कि जिसके कारण अपवाद में परिवर्तन (f_locals सही ढंग से संतरी में प्रदर्शित होने के साथ ) ठीक से लॉग इन करने की नहीं कर रहा हूँ, लेकिन वास्तव बनी हुई है कि कौवे < 5.0 मेरे लिए काम नहीं किया।

इसके अलावा, किसी भी फैंसी CELERY_ANNOTATIONS लेगवर्क (उपरोक्त के रूप में) करने की कोई आवश्यकता नहीं है, सही लॉगर के लिए प्रेषित हैंडलर को परिभाषित करने के लिए अपवादों को पकड़ने के साथ-साथ अन्य लॉगिंग स्तरों का संदेश भी पर्याप्त लगता है।

+0

लॉगिंग स्टैक स्थानीय और डुप्लिकेट लॉगिंग के संबंध में प्रासंगिक समस्या देखें [यहां] (https://github.com/getsentry/raven-python/issues/427) – tutuDajuju

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