दूसरा संपादन: खोदने के बाद, स्थानीय चर के साथ अपवाद को लॉग करने के तरीके से प्रश्न बदल गया कि सेलेरी को दूसरे लॉग संदेश भेजने से कैसे रोकें, स्थानीय युद्ध हैं। नीचे दिए गए प्रयास के बाद, मैंने वास्तव में देखा कि मुझे हमेशा 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 के साथ लॉग इन करने का प्रयास कर सकता हूं। लेकिन यह आदर्श से कम है।
लॉगिंग स्टैक स्थानीय और डुप्लिकेट लॉगिंग के संबंध में प्रासंगिक समस्या देखें [यहां] (https://github.com/getsentry/raven-python/issues/427) – tutuDajuju