जवाबों:
ज़रूर, लॉगिंग डॉक्स में फ़ॉर्मेटर्स की जाँच करें । विशेष रूप से लिनिनो और पाथनाम चर।
% (pathname) स्रोत फ़ाइल का पूर्ण पथनाम जहाँ लॉगिंग कॉल जारी की गई थी (यदि उपलब्ध हो)।
pathname का % (फ़ाइल नाम) फ़ाइल नाम भाग।
% (मॉड्यूल) का मॉड्यूल (फ़ाइल नाम का नाम भाग)।
% (funcName) फ़ंक्शन का नाम लॉगिंग कॉल है।
% (lineno) d सोर्स लाइन नंबर जहाँ लॉगिंग कॉल जारी की गई थी (यदि उपलब्ध हो)।
कुछ इस तरह दिखता है:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
एसईबी के बहुत उपयोगी उत्तर के शीर्ष पर , यहां एक आसान कोड स्निपेट है जो लकड़हारे के उपयोग को एक उचित प्रारूप के साथ प्रदर्शित करता है:
#!/usr/bin/env python
import logging
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug("This is a debug log")
logger.info("This is an info log")
logger.critical("This is critical")
logger.error("An error occurred")
यह उत्पादन उत्पन्न करता है:
2017-06-06:17:07:02,158 DEBUG [log.py:11] This is a debug log
2017-06-06:17:07:02,158 INFO [log.py:12] This is an info log
2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical
2017-06-06:17:07:02,158 ERROR [log.py:14] An error occurred
डिबग लॉगिंग को मानक तरीके से भेजने वाले तरीके से ऊपर का निर्माण करने के लिए:
import logging
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"
formatter = logging.Formatter(FORMAT)
ch.setFormatter(formatter)
root.addHandler(ch)
logging.debug("I am sent to standard out.")
उपरोक्त फ़ाइल debug_logging_example.py
को आउटपुट नामक फ़ाइल में रखना:
[debug_logging_example.py:14 - <module>() ] I am sent to standard out.
फिर अगर आप लॉगिंग कमेंट को बंद करना चाहते हैं root.setLevel(logging.DEBUG)
।
एकल फ़ाइलों (उदाहरण के लिए क्लास असाइनमेंट) के लिए मैंने इसे print()
बयानों का उपयोग करने के विपरीत करने का एक बेहतर तरीका पाया है । इससे पहले कि आप इसे सबमिट करने से पहले डिबग आउटपुट को एक ही स्थान पर बंद कर सकें।
PyCharm या Eclipse pydev का उपयोग करने वाले देवताओं के लिए, निम्नलिखित कंसोल कंसोल आउटपुट में लॉग स्टेटमेंट के स्रोत के लिए एक लिंक का उत्पादन करेगा:
import logging, sys, os
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, format='%(message)s | \'%(name)s:%(lineno)s\'')
log = logging.getLogger(os.path.basename(__file__))
log.debug("hello logging linked to source")
अधिक चर्चा और इतिहास के लिए ग्रहण कंसोल में पाइदेव स्रोत फ़ाइल हाइपरलिंक देखें ।
# your imports above ...
logging.basicConfig(
format='%(asctime)s,%(msecs)d %(levelname)-8s [%(pathname)s:%(lineno)d in
function %(funcName)s] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG
)
logger = logging.getLogger(__name__)
# your classes and methods below ...
# An naive Sample of usage:
try:
logger.info('Sample of info log')
# your code here
except Exception as e:
logger.error(e)
अन्य उत्तरों में से अलग, यह फ़ाइल का पूर्ण पथ और फ़ंक्शन नाम लॉग करेगा जो त्रुटि हो सकती है। यह उपयोगी है यदि आपके पास एक से अधिक मॉड्यूल वाली परियोजना है और इन मॉड्यूल में समान नाम के साथ कई फाइलें हैं।