मैं एक Pylons / TurboGears एप्लिकेशन है। मैं उसी लकड़हारे को लॉग करना चाहूंगा (जैसा कि निर्दिष्ट किया गया है) qualname
संपत्ति) दो अलग लॉग हैंडलर का उपयोग करने के लिए, प्रत्येक अपने लॉग स्तर के साथ।
संतरी / रेवेन लकड़हारे को केवल WARN + स्तर SQLAlchemy संदेश प्राप्त करना चाहिए, और कंसोल लकड़हारा INFO + स्तर SQLAlchemy संदेश प्राप्त करना चाहिए।
यहाँ मेरी संक्षिप्त आई फाइल है:
[loggers]
keys = root, sqlalchemy_console, sqlalchemy_sentry
[handlers]
keys = console, sentry
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console, sentry
[logger_sqlalchemy_console]
level = INFO
handlers = console
qualname = sqlalchemy.engine
propagate = 0
[logger_sqlalchemy_sentry]
level = WARN
handlers = sentry
qualname = sqlalchemy.engine
propagate = 0
हालांकि logger_sqlalchemy_sentry
ओवरराइड करने लगता है logger_sqlalchemy_console
और उसके संदेश चुरा लेते हैं। यह ini फ़ाइल में लकड़हारा के आदेश की परवाह किए बिना होता है।
क्या विभिन्न स्तरों के साथ कई स्थानों पर एक ही लकड़हारे / क्वालनेम को लॉग करने के लिए पाइलन्स का उपयोग करना संभव है?
यदि हां, तो क्या संतरी / रेवेन के लिए उन लकड़हाराओं में से एक होना संभव है? क्या मेरी इनआई फ़ाइल में कुछ गड़बड़ है, या रेवेन में कोई बग है?
उत्तर:
जवाब के लिए 2 № 1समस्या यह है कि आप कर रहे हैं कि आप कॉन्फ़िगर कर रहे हैं sqlalchemy.engine
Logger
दो बार। लकड़हारा वर्गों के उदाहरणों के अनुरूप है logging.Logger
, जो चीजें लौटा दी जाती हैं logging.getLogger(qualname)
। उस कॉल के द्वारा केवल एक ही वस्तु को वापस किया जा सकता है, आप संभवतः एक ही गुण के साथ उनमें से एक से अधिक सेट कर सकते हैं।
आपको जो चाहिए वह कई है संचालकों उस लकड़हारे के लिए, उसी तरह जिस तरह आपने अपने रूट लकड़हारे को कई हैंडलर दिए थे। फिर आप व्यक्तिगत हैंडलर पर वांछित लॉग स्तर निर्दिष्ट कर सकते हैं।
दुर्भाग्य से, fileConfig()
doesn "t आप कॉन्फ़िगर करने के लिए एक आसान तरीका देएक ही हैंडलर विभिन्न लॉग स्तरों के साथ, जो कि रिकॉर्ड बनाने के आधार पर होता है, आपको "रूट और दोनों के लिए डुप्लिकेट हैंडलर सेक्शन सेट करने की आवश्यकता होगी" sqlalchemy.engine
लकड़हारा उनके लिए अलग लॉग स्तर है।
उत्तर № 2 के लिए 1
आप लकड़हारा और हैंडलर मिला रहे हैं - जैसा कि TokenMacGuy
कहते हैं, आपको दो की जरूरत है संचालकों नाम के लकड़हारे के लिए sqlalchemy.engine
। कॉन्फ़िगर करें StreamHandler
(कंसोल) स्तर के साथ INFO
और ए SentryHandler
(संतरी) स्तर के साथ WARNING
, और यह sqlalchemy.engine
के स्तर के साथ लकड़हारा DEBUG
या INFO
। फिर आपको वांछित परिणाम प्राप्त करना चाहिए। (यहां तक कि जब DEBUG
संदेशों को लॉग किया जाता है, हैंडलर पर स्तर उन्हें उन घटनाओं को छोड़ने से रोक देगा जो उनके स्तर से कम हैं।)
जब तक आप पाइथन 2.6 या उससे पहले तक सीमित नहीं हैं, तब तक यह प्रयोग करने पर विचार करने लायक है logging.config.dictConfig
प्राथमिकता में एपीआई logging.config.fileConfig
, यदि आप। dictConfig
एपीआई पुराने की तुलना में लॉगिंग कॉन्फ़िगरेशन पर बेहतर नियंत्रण की अनुमति देता है fileConfig
एपीआई, जिसे और विकसित नहीं किया जाएगा।