python 拦截到电子邮件或短信的日志记录
python intercept logging to email or sms
我想知道是否可以根据级别拦截日志调用以发送电子邮件或短信。
请记住,在电子邮件和短信下,还有 logging.error
可能会导致循环
import logging, smtplib, urllib2
LOGGER = 'log.out'
FORMAT = '%(asctime)s %(levelname)s %(message)s'
LEVEL = logging.INFO
logging.basicConfig(filename=LOGGER, format=FORMAT, maxBytes=2048, level=LEVEL)
def email(_msg):
try:
email_mesg = "Subject:{0}\n\n{1}".format(email_subj, _msg)
s = smtplib.SMTP(email_host)
s.sendmail(email_from, email_recv, email_mesg)
s.quit()
except smtplib.SMTPException as e:
logging.error(e)
def sms(_msg):
try:
sms_mesg = urllib2.quote(_msg)
url = "https://smsapi/?username={0}&password={1}&message={2}&orig={3}&number={4}".format(sms_user, sms_pass, sms_mesg, sms_orig, sms_numb)
req = urllib2.Request(url)
res = urllib2.urlopen(req)
except urllib2.URLError as e:
logging.error(e)
if __name__ == "__main__":
"""
The following line should log and trigger email
"""
logging.warning("Something you should know about")
"""
The following line should log and trigger sms
"""
logging.error("Something you should know about")
您可以使用 Filter:
import sys, logging
class SMSEmailFilter(logging.Filter):
def filter(self, record):
if not record.args:
if record.levelno == logging.WARN:
email(record.msg)
elif record.levelno >= logging.ERROR:
sms(record.msg)
return True
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', stream=sys.stdout)
logger = logging.getLogger()
logger.addFilter(SMSEmailFilter())
def email(_msg):
try:
print "Sending email..."
except:
logger.error('from email', {'a': 1})
def sms(_msg):
try:
print "Sending sms..."
except:
logger.error('from sms', {'a': 1})
logger.warning('This is a warning')
logger.error('This is an error')
我想知道是否可以根据级别拦截日志调用以发送电子邮件或短信。
请记住,在电子邮件和短信下,还有 logging.error
可能会导致循环
import logging, smtplib, urllib2
LOGGER = 'log.out'
FORMAT = '%(asctime)s %(levelname)s %(message)s'
LEVEL = logging.INFO
logging.basicConfig(filename=LOGGER, format=FORMAT, maxBytes=2048, level=LEVEL)
def email(_msg):
try:
email_mesg = "Subject:{0}\n\n{1}".format(email_subj, _msg)
s = smtplib.SMTP(email_host)
s.sendmail(email_from, email_recv, email_mesg)
s.quit()
except smtplib.SMTPException as e:
logging.error(e)
def sms(_msg):
try:
sms_mesg = urllib2.quote(_msg)
url = "https://smsapi/?username={0}&password={1}&message={2}&orig={3}&number={4}".format(sms_user, sms_pass, sms_mesg, sms_orig, sms_numb)
req = urllib2.Request(url)
res = urllib2.urlopen(req)
except urllib2.URLError as e:
logging.error(e)
if __name__ == "__main__":
"""
The following line should log and trigger email
"""
logging.warning("Something you should know about")
"""
The following line should log and trigger sms
"""
logging.error("Something you should know about")
您可以使用 Filter:
import sys, logging
class SMSEmailFilter(logging.Filter):
def filter(self, record):
if not record.args:
if record.levelno == logging.WARN:
email(record.msg)
elif record.levelno >= logging.ERROR:
sms(record.msg)
return True
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', stream=sys.stdout)
logger = logging.getLogger()
logger.addFilter(SMSEmailFilter())
def email(_msg):
try:
print "Sending email..."
except:
logger.error('from email', {'a': 1})
def sms(_msg):
try:
print "Sending sms..."
except:
logger.error('from sms', {'a': 1})
logger.warning('This is a warning')
logger.error('This is an error')