2016-02-14 3 views
6

मैं logging.Logger.manager.loggerDict निरीक्षण कर रहा हूँ में कर रही है:क्या celery.utils.log.ProcessAwareLoggerobject करके logging.Logger.manager.loggerDict

import logging 
logging.Logger.manager.loggerDict 

और dict इस प्रकार है:

{ 
    'nose.case': <celery.utils.log.ProcessAwareLoggerobjectat0x112c8dcd0>, 
    'apps.friends': <logging.PlaceHolderobjectat0x1147720d0>, 
    'oauthlib.oauth2.rfc6749.grant_types.client_credentials': <celery.utils.log.ProcessAwareLoggerobjectat0x115c48710>, 
    'apps.adapter.views': <celery.utils.log.ProcessAwareLoggerobjectat0x116a847d0>, 
    'apps.accounts.views': <celery.utils.log.ProcessAwareLoggerobjectat0x116976990>, 

    } 
    There are more but I truncated it 

मेरे प्रश्न हैं:

  1. कैसे आ अजवाइन विभिन्न अन्य गैर अजवाइन क्षुधा की लॉगिंग में शामिल है? क्या ऐसा इसलिए है क्योंकि लॉगिंग एक एसिंक तरीके से की जाती है और किसी भी तरह से फ्रेमवर्क लॉगिंग सेलेरी की उपस्थिति का पता लगाता है और इसका उपयोग करता है?
  2. logger = logging.getLogger(__name__) का उपयोग करके लॉग इन करने वाली अपनी दो फाइलों के लिए, मुझे लगता है कि एक प्लेसहोल्डर ऑब्जेक्ट है और अन्य दो यह celery.utils.log.ProcessAwareLogger ऑब्जेक्ट है - हालांकि इन बाद वाले दो को दृश्यों में बुलाया जाता है, न कि सेलरी प्रक्रियाओं में। कैसे यह इस तरह से बन गया तो

धन्यवाद

उत्तर

5

अजवाइन अपने आप में एक ProcessAwareLogger वर्ग करता है कि चीजों के एक जोड़े के साथ,, (वैश्विक) लकड़हारा वर्ग की जगह logging.setLoggerClass विधि का उपयोग कर: में प्रवेश करने का प्रयास करते हुए बचने सिग्नल हैंडलर, और लॉग इन करने के लिए एक प्रक्रिया नाम जोड़ें। जैसे ही सेलेरी की लॉगिंग सिस्टम स्थापित हो जाती है। setLoggerClass की वैश्विक प्रकृति की वजह से आप इस वर्ग को अपने स्वयं के लॉगर्स पर भी देख रहे हैं।

क्यों, बिल्कुल, सेलेरी इस तरह डिज़ाइन की गई है, मुझे लगता है कि आपको सेलेरी के डेवलपर से पूछना होगा, लेकिन प्रभावी रूप से यह सेलेरी को यह सुनिश्चित करने की अनुमति देता है कि सिग्नल हैंडलर सुरक्षा और प्रक्रिया का नाम तब भी ख्याल रखेगा जब आप अपने ऐप में अपने लॉगर्स का प्रयोग करें।

अजगर logging डॉक्स ध्यान दें:

आप संकेत मॉड्यूल का उपयोग कर अतुल्यकालिक संकेत संचालकों को कार्यान्वित कर रहे हैं, तो आप इस तरह के संचालकों के भीतर से लॉगिंग उपयोग करने में सक्षम नहीं हो सकता। ऐसा इसलिए है क्योंकि थ्रेडिंग मॉड्यूल में लॉक कार्यान्वयन हमेशा पुनः प्रवेश नहीं होते हैं, और इसलिए ऐसे सिग्नल हैंडलर से नहीं बुलाया जा सकता है।

सेलेरी signal का उपयोग करता है, इसलिए यह वैश्विक रूप से इसके लॉगर वर्ग को लागू करने के लिए एक कारण हो सकता है।

+0

मुझे प्रोसेसएवेयर लॉगर पर बहुत लंबे समय तक भ्रमित कर दिया गया है और आपकी व्याख्या के लिए धन्यवाद। – dalang

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