Python日志记录SMTPHandler无法正常工作

时间:2018-04-10 18:23:09

标签: python python-3.x logging

我已经完成并尝试在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')

1 个答案:

答案 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)

修复了整件事。