On database operations, show stack trace:
try:
Something
except Exception as e:
logger.error(e, exc_info=True)
db_session.rollback()
return None
Setup logger custom format to show request id:
import logging
from flask import request, g
class CustomFormatter(logging.Formatter):
def format(self, record):
record.request_id = g.request_id
record.correlation_id = g.correlation_id
record.method = request.method
record.path = request.path
record.host = request.host
return super(CustomFormatter, self).format(record)
Configure before and after request logging
import logging
from time import time
from uuid import uuid4
from flask import request, g, json
logger = logging.getLogger(__name__)
def setup_request_loggers(app):
@app.before_request
def log_request():
g.start = time()
g.request_id = request.headers.get('X-Request-Id') or uuid4()
g.correlation_id = request.headers.get('X-Correlation-Id')
values = request.get_json() or json.dumps(dict(request.form))
logger.info("values={}".format(values))
def setup_response_loggers(app):
@app.after_request
def log_response(response):
now = time()
duration = round(now - g.start, 4)
status_code = response.status_code
logger.info("status={} duration {}s".format(status_code, duration))
return response
On database operations, show stack trace:
Setup logger custom format to show request id:
Configure before and after request logging