parent
274ac0574c
commit
98d11b62a6
45
geocode/errors_to_db.py
Normal file
45
geocode/errors_to_db.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
"""Save errors to the database."""
|
||||
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
import flask
|
||||
|
||||
from .database import session
|
||||
from .model import ErrorLog
|
||||
|
||||
|
||||
class DatabaseLoggingHandler(logging.Handler):
|
||||
"""A logging handler that logs errors to a database."""
|
||||
|
||||
def emit(self, record: logging.LogRecord) -> None:
|
||||
"""Save log reord to database."""
|
||||
trace = None
|
||||
if record.exc_info:
|
||||
trace = traceback.format_exception(*record.exc_info)
|
||||
# request: flask.Request = record.request # type: ignore
|
||||
request = flask.request
|
||||
error_log = ErrorLog(
|
||||
error_type=record.levelname,
|
||||
error_message=record.getMessage(),
|
||||
traceback="".join(trace) if trace else "No traceback available",
|
||||
context_info={
|
||||
"url": request.url,
|
||||
"args": dict(request.args),
|
||||
"endpoint": request.endpoint,
|
||||
"pathname": record.pathname,
|
||||
"lineno": record.lineno,
|
||||
"module": record.module,
|
||||
"funcName": record.funcName,
|
||||
"remote_addr": request.remote_addr,
|
||||
},
|
||||
)
|
||||
session.add(error_log)
|
||||
session.commit()
|
||||
|
||||
|
||||
def setup_error_recorder(app: flask.Flask) -> None:
|
||||
"""Save errors to the database."""
|
||||
db_handler = DatabaseLoggingHandler()
|
||||
db_handler.setLevel(logging.ERROR)
|
||||
app.logger.addHandler(db_handler)
|
Loading…
Reference in a new issue