owl-map/matcher/error_mail.py

47 lines
1.4 KiB
Python
Raw Normal View History

import logging
from logging.handlers import SMTPHandler
from logging import Formatter
from flask import request
PROJECT = 'osm-wikidata'
class MatcherSMTPHandler(SMTPHandler):
def getSubject(self, record): # noqa: N802
return (f'{PROJECT} error: {record.exc_info[0].__name__}'
if (record.exc_info and record.exc_info[0])
else f'{PROJECT} error: {record.pathname}:{record.lineno:d}')
class RequestFormatter(Formatter):
def format(self, record):
record.request = request
return super().format(record)
def setup_error_mail(app):
if not app.config.get('ERROR_MAIL'):
return
formatter = RequestFormatter('''
Message type: {levelname}
Location: {pathname:s}:{lineno:d}
Module: {module:s}
Function: {funcName:s}
Time: {asctime:s}
GET args: {request.args!r}
URL: {request.url}
Message:
{message:s}
''', style='{')
mail_handler = MatcherSMTPHandler(app.config['SMTP_HOST'],
app.config['MAIL_FROM'],
app.config['ADMINS'],
app.name + ' error')
mail_handler.setFormatter(formatter)
mail_handler.setLevel(logging.ERROR)
app.logger.propagate = True
app.logger.addHandler(mail_handler)