प्रश्न:
मैं अपवाद को पकड़ने और उन्हें बजाय जाहिरा तौर पर उन्हें निगलने का एक लॉग फ़ाइल में लिखने के लिए अजवाइन चाहता हूँ ...
वर्तमान शीर्ष यहां एक पेशेवर समाधान के प्रयोजनों के लिए उत्तर दिया गया है। कई पायथन डेवलपर्स केस-दर-मामले आधार पर एक लाल झंडा पर पकड़ने वाली कंबल त्रुटि पर विचार करेंगे।
पर, मैं वहाँ उम्मीद कुछ कार्यकर्ता लॉग में लॉग इन होने के लिए चाहते हैं, कम से कम, हर काम में विफल रहता है कि के लिए
रुको ...
: यह करने के लिए एक उचित घृणा एक टिप्पणी में अच्छी तरह से व्यक्त किया गया
अजवाइन अपवाद को पकड़ने करता है, यह सिर्फ नहीं कर रहा है ओपी यह इसके साथ करना चाहता था क्या (यह परिणाम बैकएंड में यह संग्रहीत करता है)। निम्न समस्या इंटरनेट पर इस समस्या पर सबसे अच्छी पेशकश है। यह थोड़ा दिनांकित है, लेकिन कांटे और सितारों की संख्या पर ध्यान दें।
https://gist.github.com/darklow/c70a8d1147f05be877c3
सार विफलता मामले को ले और इसके साथ कुछ कस्टम कर रही है। यह ओपी की समस्या का एक सुपरसेट है। यहां अपवाद लॉग करने के लिए गिस्ट में समाधान को समायोजित करने का तरीका बताया गया है।
import logging
logger = logging.getLogger('your.desired.logger')
class LogErrorsTask(Task):
def on_failure(self, exc, task_id, args, kwargs, einfo):
logger.exception('Celery task failure!!!1', exc_info=exc)
super(LogErrorsTask, self).on_failure(exc, task_id, args, kwargs, einfo)
तुम अब भी सुनिश्चित करें कि आपके सभी कार्य इस कार्य वर्ग से विरासत, और सार आप (base=LogErrorsTask
kwarg के साथ) @task
डेकोरेटर उपयोग कर रहे हैं कि कैसे यह करने के लिए पता चलता करने की आवश्यकता होगी।
इस समाधान का लाभ किसी भी अतिरिक्त प्रयास में आपके कोड को घोंसला नहीं करना है-संदर्भों को छोड़कर। यह विफलता कोड पथ पर पिगबैकिंग है कि अजवाइन पहले से ही उपयोग कर रहा है।
अजवाइन से क्या चाहते हैं? मैं डेस्कटॉप ऐप की तरह दुर्घटनाग्रस्त नहीं हो सका। आप दो आसान तरीकों का उपयोग कर सकते हैं। 1. परिणाम बैकएंड का उपयोग करें और कार्य को गिरने के रूप में चिह्नित करें। 2. छोड़ने का प्रयास करने के लिए अजवाइन में अपने सभी कोड लपेटें। – Rustem
@Rustem मैं चाहता हूं कि सेलेरी अपवादों को पकड़ ले और उन्हें स्पष्ट रूप से निगलने के बजाए लॉग फ़ाइल में लिखें ... –