2011-11-19 11 views
15

मैं लॉग युक्त ईमेल भेजने के लिए पाइथन के logging मॉड्यूल का उपयोग करने का प्रयास कर रहा हूं। मेरी समस्या यह है कि हर बार जब मैं एक लॉग एंट्री लिखता हूं, तो एक ईमेल भेजा जाता है। मैं लॉग संदेशों को कतार कैसे लगा सकता हूं और स्क्रिप्ट के समापन पर एक ईमेल भेज सकता हूं?पाइथन के लॉगिंग मॉड्यूल में SMTPHandler एक समय में ईमेल भेज रहा है। मैं इसे कैसे रोक सकता हूँ?

मुझे एहसास है कि यह emit() विधि के साथ किया गया है, लेकिन मैं इसका उपयोग कैसे नहीं कर सकता।

import logging, logging.handlers 
log = logging.getLogger("mylogger") 
log.setLevel(logging.DEBUG) 
h2 = logging.handlers.SMTPHandler(mailhost='mailserver', 
          fromaddr='[email protected]', 
          toaddrs=['[email protected]'], 
          subject='The log', 
          credentials=('user','pwd'), 
          secure=None) 
h2.setLevel(logging.INFO) 
h2.setFormatter(f) 
log.addHandler(h2) 

log.info("Did something") 
log.info("Did something else") 
log.info("This would send a third email. :-(") 

उत्तर

8

this answer जो मैं एक ऐसी ही प्रश्न के लिए दे दी देखें उपयोग करने के लिए एक उदाहरण हैंडलर here है, आप अपनी आवश्यकताओं के लिए इसे अनुकूलित कर सकते हैं

+0

@VinaySajip - क्या बजाय ईमेल भेजने के लिए smtplib मॉड्यूल का उपयोग करने पर अपने विचार कर रहे हैं।। – codingknob

+0

@ algotr8der - आप उदाहरण हैंडलर से देख सकते हैं कि यह वास्तव में ईमेल भेजने के लिए 'smtplib' का उपयोग करता है। –

2

वांछित व्यवहार का उत्पादन करने के लिए बस SMTPHandler को उपclass। उदाहरण के लिए आप प्रत्येक तीसरे लॉग संदेश पर एक मेल भेजने के लिए उत्सर्जन विधि को ओवरराइड कर सकते हैं

सावधानी: आपके द्वारा चुने गए कार्यान्वयन के आधार पर यदि आप केवल एक या दो बार लॉग इन करते हैं तो कोई मेल नहीं भेजा जाएगा। शायद देरी भेजने का समाधान हो सकता है: मेल भेजने से पहले एक सेकंड प्रतीक्षा करें। यदि किसी दूसरे के बाद कोई अन्य लाइन प्राप्त नहीं होती है, तो उसे भेजने के लिए संदेश में लाइन जोड़ें और दूसरी सेकंड प्रतीक्षा करें ... और इसी तरह ... (देरी प्रेषण एक अलग थ्रेड में किया जाना चाहिए (Timer का उपयोग करने पर विचार करें)

संबंधित मुद्दे