मैं Django
के साथ काम कर रहे सेलेरी लॉगिंग प्राप्त करने का प्रयास कर रहा हूं। मैंने कंसोल पर जाने के लिए settings.py
में सेट-अप लॉगिंग किया है (जो ठीक काम करता है क्योंकि मैं Heroku
पर होस्ट कर रहा हूं)। प्रत्येक मॉड्यूल के शीर्ष पर, मेरे पास है:Django Celery लॉगिंग सर्वश्रेष्ठ अभ्यास
import logging
logger = logging.getLogger(__name__)
और मेरे tasks.py में, मेरे पास है:
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
कि किसी कार्य से प्रवेश कॉल के लिए ठीक काम करता है और मैं इस तरह उत्पादन मिलता है:
2012-11-13T18:05:38+00:00 app[worker.1]: [2012-11-13 18:05:38,527: INFO/PoolWorker-2] Syc feed is starting
लेकिन यदि वह कार्य तब किसी अन्य मॉड्यूल में एक विधि को कॉल करता है, उदाहरण के लिए queryset
विधि, मुझे डुप्लिकेट लॉग प्रविष्टियां मिलती हैं, उदा।
2012-11-13T18:00:51+00:00 app[worker.1]: [INFO] utils.generic_importers.ftp_processor process(): File xxx.csv already imported. Not downloaded
2012-11-13T18:00:51+00:00 app[worker.1]: [2012-11-13 18:00:51,736: INFO/PoolWorker-6] File xxx.csv already imported. Not downloaded
मुझे लगता है कि मैं इस्तेमाल कर सकते हैं
CELERY_HIJACK_ROOT_LOGGER = False
सिर्फ Django
लॉगिंग उपयोग करने के लिए, लेकिन यह काम नहीं किया, जब मैं इसे करने की कोशिश और यहां तक कि अगर मैं यह काम करने के लिए मिलता था, मैं "PoolWorker-6"
खो देगा थोड़ा जो मैं चाहता हूँ। (संयोग से, मैं यह नहीं समझ सकता कि सेलेरी से लॉग एंट्री में कार्य नाम को कैसे प्रदर्शित किया जाए, क्योंकि the docs इंगित करता है कि यह होना चाहिए)।
मुझे संदेह है कि मुझे यहां कुछ आसान याद आ रहा है।
संबंधित: [अजवाइन और अजगर के कार्यों के अंदर प्रवेश] (http://stackoverflow.com/questions/6192265) –
मैंने इसे देखा। Get_task_logger() बिट स्पष्ट रूप से add.get_logger() बिट – alan
करने का नया तरीका है, वास्तव में, ऐसा लगता है कि मेरा जवाब सेलेरी 3.0 के लिए पुराना है; चूंकि मैं इस समय सेलेरी का उपयोग नहीं करता क्योंकि मुझे इसके बारे में पता नहीं था। :-) –