2011-08-04 22 views
17

में पायथन मानक लॉगिंग का उपयोग करें मुझे सेलरी को पूर्व-मौजूदा सिस्टम में लागू करना होगा। सिस्टम के पिछले संस्करण में पहले से ही पाइथन मानक लॉगिंग का उपयोग किया गया है।सेलेरी

मेरा कोड नीचे दिए गए कोड के समान है। प्रक्रिया एक और प्रक्रिया दो गैर-अजवाइन कार्य हैं, जो हर जगह लॉगिंग कर रहे हैं। कुछ खराब होने पर हम डेटा हानि को ट्रैक करने के लिए लॉगिंग का उपयोग कर रहे हैं।

@task 
def add(x,y): 
    process_one(x,y) 
    process_two(x,y) 

मैं कैसे अजवाइन को लागू करने और अजगर मानक के बजाय प्रवेश अजवाइन लॉगिंग उपयोग कर सकते हैं, तो हमारे पुराने प्रवेश प्रणाली नहीं खोया है?

मैंने पाइथन से import logging को logger = add.get_logger() में बदलने और सभी कार्यों के लिए logger को बदलने का प्रयास किया है, लेकिन मुझे नहीं लगता कि यह एक अच्छा अभ्यास है। मुझे एक और समाधान चाहिए।

अद्यतन: अजवाइन लॉगिंग में आवेदन प्रवेश जोड़ने के लिए, आप कर सकते हैं: साथ -l

$ manage.py celeryd -v 2 -B -s celery -E -l debug --traceback \ 
    --settings=settings --logfile=/(path to your log folder)/celeryd.log 

(प्रवेश) debug के रूप में, हमारे आवेदन/अजगर प्रवेश स्वचालित रूप से हमारी अजवाइन प्रवेश में शामिल है: कोई ज़रूरत नहीं logger = add.get_logger() करने के लिए।

CELERYD_HIJACK_ROOT_LOGGER = False 

मुझे बताओ कि कैसे है कि बाहर काम करता है:

उत्तर

17

आप शायद इस सेटिंग को चाहते हैं।

Btw, कारण यह जड़ लकड़हारा hijacks क्योंकि कुछ बुरी तरह से लिखा पुस्तकालयों ऊपर प्रवेश, कुछ एक पुस्तकालय कभी नहीं करना चाहिए, जिसके परिणामस्वरूप उन celeryd कार्यकर्ता :(

+0

हाय Asksol से कोई उत्पादन का सामना में सेट है, आपके उत्तर के लिए धन्यवाद। हां मैं बुरी लाइब्रेरी चीज़ के बारे में आपसे सहमत हूं। मैंने पहले से ही CELERYD_HIJACK_ROOT_LOGGER चीज़ की कोशिश की है। जब मैं अपने दोस्त से परामर्श करता हूं, तो उसने मुझे बताया कि CELERYD_HIJACK_ROOT_LOGGER = गलत बनाने के लिए बुद्धिमान नहीं है क्योंकि सेलेरीड वर्कर लॉगिंग है बहुत महत्वपूर्ण और अधिक शक्तिशाली। आउटपुट है, अजवाइन केवल लॉग की ज़िम्मेदारी को सेलेरी लॉगर से रूट/पायथन लॉगर पर रीडायरेक्ट करता है और परिणाम वही होता है। मुझे लगता है कि ऐसा होने पर, मैं इसके बजाय अजवाइन लॉगर का उपयोग करना पसंद करता हूं एक ython एक। – cactuarz

+6

तो अजवाइन लाइब्रेरी लॉगिंग सेट अप करती है क्योंकि बुरी तरह लिखित पुस्तकालय लॉगिंग सेट अप करते हैं? ;) लगता है जैसे 'आप परेशानी की तरह दिखते हैं, इसलिए मैं आपको पहले शूट करता हूं' तर्क। –

+0

@heheimbuerger: हे, अच्छा। लेकिन लाइब्रेरी के रूप में सेलेरी के बारे में सोचना वास्तव में सटीक नहीं है। सेलेरी एक वितरित कार्य कतार * ऐप * है और आप अनिवार्य रूप से इसे केवल (कोड के रूप में) कॉन्फ़िगर करते हैं, जो आप चाहते हैं उसे पूरा करने के लिए निर्दिष्ट करते हैं। माना जाता है कि, * अन्य ऐप्स * जैसे Django जैसे एकीकृत करते समय यह थोड़ा सा गड़बड़ हो सकता है। – CryingCyclops

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