我已经完成并尝试在Python 3中使用此代码,以便在发生异常时向我发送电子邮件,但STMPHandler无效。它与SMTPHandler的相同args和值以及从此answer
复制粘贴的相同代码完美配合工作代码:
import logging.handlers
smtp_handler = logging.handlers.SMTPHandler(mailhost=("smtp.gmail.com", 587),
fromaddr="somemail@gmail.com",
toaddrs="anothermail@gmail.com",
subject=u"Alfred error!",
credentials=("somemail@gmail.com", "asdasdasdasdasd"),
secure=())
logger = logging.getLogger()
logger.addHandler(smtp_handler)
try:
raise Exception()
except Exception as e:
logger.exception('Unhandled Exception')
所有处理程序都运行正常,答案中的代码只能与exception()调用一起使用。
我无法理解为什么这不起作用。
log_config.py(非工作代码):
import os
import logging
import logging.handlers
version = "2.0.0"
LOGFILE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'log', 'my_app.log')
logging.basicConfig(format='%(levelname)s - %(message)s', level=logging.DEBUG)
logging.getLogger('telegram').setLevel(logging.WARNING)
logging.getLogger('chardet.charsetprober').setLevel(logging.WARNING)
class TimedOutFilter(logging.Filter):
def filter(self, record):
if "Error while getting Updates: Timed out" in record.getMessage():
return False
def getLogger(name):
"""
Return a logger for the file
:param name: the file name
:return: a logger
"""
global version
logger = logging.getLogger(name)
fh = logging.handlers.TimedRotatingFileHandler(LOGFILE_PATH, when='midnight')
formatter = logging.Formatter('%(asctime)s - ({0}) %(name)s - %(levelname)s - %(message)s'.format(version))
fh.setFormatter(formatter)
fh.addFilter(TimedOutFilter())
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
if os.environ.get('SERVER', True):
mh = logging.handlers.SMTPHandler(mailhost=("smtp.gmail.com", 587),
fromaddr="somemail@gmail.com",
toaddrs="anothermail@gmail.com",
subject=u"Alfred error!",
credentials=("somemail@gmail.com", "asdasdasdasdasd"),
secure=())
mh.setFormatter(formatter)
mh.addFilter(TimedOutFilter())
mh.setLevel(logging.ERROR)
logger.addHandler(mh)
ch = logging.StreamHandler()
formatter = logging.Formatter('{0} %(levelname)s - %(message)s'.format(version))
ch.setFormatter(formatter)
ch.addFilter(TimedOutFilter())
ch.setLevel(logging.ERROR)
logger.addHandler(ch)
return logger
if __name__ == '__main__':
logger = getLogger(__name__)
try:
raise Exception()
except Exception as e:
logger.exception('Unhandled Exception')
logger.error('an error line')
logger.debug('a debug line')
答案 0 :(得分:0)
timedOutFilter破坏了一切,因为它只返回False但从未返回True。
所以这样做:
import seaborn as sns; sns.set(color_codes=True)
# Visualising the plots
fig, ax = plt.subplots(figsize=(10,7))
params_anno = dict(jitter=0.25,size=8, color='#91bfdb', edgecolor='black', linewidth=1, dodge=False)
ax=sns.stripplot(x=dataset["Time"], y=dataset["Ob7"],**params_anno)
params_anno = dict(data=dataset_2, x='Time', y='Ob7',jitter=0.25)
ax=sns.stripplot(size=8,color='red', edgecolor='black',linewidth=1,**params_anno)
修复了整件事。