संपादित करें: मैंने अपने प्रश्न के गोमांस का जवाब देने का अंत किया ताकि मेरे पास एक लॉगिंग लॉगिंग मॉड्यूल हो। हालांकि, मेरे पास अभी भी एक संबंधित प्रश्न है। नीचे मेरा जवाब देखें।लॉगिंग हैंडलर: मैं कैसे सुनिश्चित कर सकता हूं कि मैं दो नहीं बना रहा हूं?
मैं जो कुछ भी कर रहा हूं उसकी अस्थायी निर्देशिका में हमेशा लॉग इन करके लॉगिंग को लागू करने का प्रयास कर रहा हूं। ऐसा करने के लिए मैंने निम्नलिखित फ़ंक्शन लिखा है।
L:testing M:easy_log T:2011-04-11 15:30:14,315 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: working?
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: yes, seems to be working
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: NEW LOGGER STARTED
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: still working?
L:testing M:easy_log T:2011-04-11 15:30:14,316 > INFO: still working?
आप देख सकते हैं, यह अब डबल outputting है:
import logging, tempfile, os, sys
def getlog(logname, filename = 'python.log', directory = None):
'''returns a logger with logname that will print to filename and directoryname.'''
if directory == None:
fd, fname = tempfile.mkstemp()
directory = os.path.dirname(fname)
fullpath = directory + '/' + filename
mylog = logging.getLogger(logname)
hdlr = logging.FileHandler(fullpath)
formatter = logging.Formatter('L:%(name)s M:%(module)s T:%(asctime)s > %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
mylog.addHandler(hdlr)
mylog.setLevel(logging.INFO)
mylog.info('NEW LOGGER STARTED')
return mylog
if __name__ == '__main__':
log = getlog('testing')
log.info('working?')
log.info('yes, seems to be working')
log2 = getlog('testing')
log2.info('still working?')
यहाँ उत्पादन होता है। हालांकि, लॉगिंग मॉड्यूल बल्कि भ्रमित है, और मुझे यह पता लगाने का कोई तरीका नहीं पता कि कोई लॉग पहले ही चालू हो चुका है या यदि किसी लॉग ऑब्जेक्ट में पहले से हैंडलर है। कुछ मदद की सराहना की जाएगी।
संपादित करें: थोड़ा और विस्तार जोड़ने के लिए, मैं इसे कई मॉड्यूल में कॉल करने की योजना बना रहा हूं, अनिवार्य रूप से "logging.getLogger" कॉल को प्रतिस्थापित करने का प्रयास कर रहा हूं।
एफडब्ल्यूआईडब्ल्यू आप स्थापित हैंडलरों की सूची के माध्यम से बस "mylog.handlers" तक पहुंच सकते हैं – amirpc