मेरे पास एक छोटा अजगर प्रोजेक्ट है जिसमें निम्नलिखित संरचना है -
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
मैं संदेश को stdout और एक लॉग फ़ाइल को प्रिंट करने के लिए डिफ़ॉल्ट लॉगिंग मॉड्यूल का उपयोग करने की योजना बना रहा हूं। लॉगिंग मॉड्यूल का उपयोग करने के लिए, कुछ आरंभीकरण आवश्यक है -
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
वर्तमान में, मैं संदेश प्रारंभ करने से पहले हर मॉड्यूल में यह आरंभ करता हूं। क्या यह एक ही स्थान पर केवल एक ही बार में यह इनिशियलाइज़ेशन करना संभव है कि पूरे प्रोजेक्ट में लॉग इन करके समान सेटिंग्स का पुन: उपयोग किया जाए?
package/__init__.py
। यह आमतौर पर आपके द्वारा if __name__ == '__main__'
कोड डालने की जगह नहीं है । इसके अलावा, प्रॉपर्टी का उदाहरण ऐसा लगता है कि यह आयात पर बिना शर्त कॉन्फिगर कोड कहेगा, जो मुझे सही नहीं लगता। आम तौर पर, लॉगिन कोड एक ही स्थान पर किया जाना चाहिए और आयात के साइड-इफेक्ट के रूप में नहीं होना चाहिए, जब आप __main__ आयात कर रहे हों।
if __name__ == '__main__'
? (यदि यह मामला है तो यह स्पष्ट रूप से उल्लेखित नहीं है)
fileConfig
हर मॉड्यूल में कॉल करने की ज़रूरत नहीं है जो लॉगिंग करता है, जब तक कि आपके पासif __name__ == '__main__'
उन सभी में तर्क नहीं है। यदि पैकेज एक लाइब्रेरी है, तो प्रॉपर्टी का जवाब अच्छा अभ्यास नहीं है, हालांकि यह आपके लिए काम कर सकता है - किसी को जोड़ने के अलावा, लाइब्रेरी पैकेज में लॉगिंग कॉन्फ़िगर नहीं करना चाहिएNullHandler
।