लांग उत्तर
logging मॉड्यूल एक अजगर मॉड्यूल है कि किसी भी अजगर कोड एक तरीका है कि उत्पादन-अज्ञेयवाद वास्तविक आवेदन इसे का उपयोग करने के लिए है में जानकारी लॉग इन करने की अनुमति देता है। किसी भी गहराई पर पुस्तकालय लॉगिंग मॉड्यूल, लॉग जानकारी, चेतावनियां, त्रुटियां इत्यादि आयात कर सकते हैं और यह नहीं जानना चाहिए कि उपयोगकर्ता उन्हें कैसे प्राप्त करेगा।
जो आप देख रहे हैं वह आपके अपने आवेदन में हैंडलर की अनुपस्थिति के संबंध में है। ZODB स्पष्ट रूप से जानकारी लॉगिंग कर रहा है, फिर भी क्योंकि आपने एक हैंडलर परिभाषित नहीं किया है, यह लॉगिंग जानकारी केवल ईथर में वाष्पीकरण कर रही है। यह आपको यह सूचित करते है कि अगर आप कुछ लॉगिंग जानकारी देखने के लिए चाहते हैं, आप Logging Cookbook से कोई हैंडलर
परिभाषित करना चाहिए:
import logging
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
यह उदाहरण अपने ऐप के लिए नाम के साथ एक लकड़हारा बनाता है। फिर यह दो प्रकार के हैंडलर बनाता है। एक फ़ाइल में DEBUG स्तर लॉग लिखने के लिए एक फ़ाइल हैंडलर है। दूसरा एक स्ट्रीम हैंडलर है जो आपके कंसोल में त्रुटियां भेजेगा।
आप अधिक वर्बोज़ जानकारी अपने कंसोल के लिए जा रहा देखना चाहता था, तो आप जानकारी के लिए लॉग स्तर को बदल सकता है:
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
इसके अलावा "formatters" की अवधारणा पर ध्यान दें। आप विभिन्न हैंडलर के लिए अलग-अलग लॉग प्रारूप सेट कर सकते हैं।
यदि आप कम से कम अपने ऐप में एक स्ट्रीम हैंडलर बनाते हैं, तो यह अब आपको चेतावनी नहीं देगा कि एक हैंडलर परिभाषित नहीं किया गया है।
पायथन 2.7+ के लिए, logging
मॉड्यूल में NullHandler
शामिल है।इसका उद्देश्य लाइब्रेरी (जैसे आपकी डेटाबेस लाइब्रेरी) में एक डिफ़ॉल्ट हैंडलर होने के लिए किया जाता है जो अंत उपयोगकर्ता यूजर लाइब्रेरी का उपयोग कर बिना किसी लॉगिंग हैंडलर (जैसा कि आप कर रहे थे) त्रुटियों को शांत करते हैं। इसलिए यदि आपको लॉगिंग करने की परवाह नहीं है और बस इसे चुप करना चाहते हैं, तो आप अपने कोड में NullHandler
जोड़ सकते हैं। यह वास्तव में लॉगिंग स्थापित करने के लिए सिफारिश की है, लेकिन यह सिर्फ एक और विकल्प है:
Adding NullHandler to the logger
import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())
के संभावित डुप्लिकेट [अजगर - कोई संचालकों लकड़हारा के लिए पाया जा सकता है "OpenGL.error"] (http://stackoverflow.com/questions/345991/python-no-handlers-could-be-found-for-logger-opengl-error) –
यह एक ZODB समस्या नहीं है; आपने अपने आवेदन में पायथन लॉगिंग सिस्टम को कॉन्फ़िगर नहीं किया है। –
मैंने उस प्रश्न को हटाने का अनुरोध किया .मैं इस पोस्ट को संबंधित प्रश्न अपडेट कर रहा हूं। धन्यवाद jdi –