Python日志记录SMTPHandler不工作
我已经在Python3中完成并尝试了这段代码,用于在异常发生时向我发送电子邮件,但STMPHandler不起作用。它与SMTPHandler的相同参数和值以及由此粘贴的相同代码副本完美结合 工作代码:Python日志记录SMTPHandler不工作,python,python-3.x,logging,Python,Python 3.x,Logging,我已经在Python3中完成并尝试了这段代码,用于在异常发生时向我发送电子邮件,但STMPHandler不起作用。它与SMTPHandler的相同参数和值以及由此粘贴的相同代码副本完美结合 工作代码: import logging.handlers smtp_handler = logging.handlers.SMTPHandler(mailhost=("smtp.gmail.com", 587), fr
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')
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')
所有处理程序都很好,答案中的代码只适用于exception()调用
我不明白为什么这不起作用
log\u config.py(非工作代码):
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')
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')
timedOutFilter破坏了一切,因为它只返回False,而从不返回True 那么就这么做吧:
class TimedOutFilter(logging.Filter):
def filter(self, record):
if "Error while getting Updates: Timed out" in record.getMessage():
return False
return True # <==== Added this line only
class TimedOutFilter(logging.Filter):
def过滤器(自我,记录):
如果记录中的“获取更新时出错:超时”:
返回错误
return True#第一个想法是必须使用TLS连接到gmail。试着看一下文档,我刚刚看到了你的评论,我现在就要看文档了,但是TLS已经被使用了。端口587,凭证,安全-所需的一切都在那里。@VPfB正是如此。我看了一下医生,似乎什么都没少