Skip to content

Add distributed logging tracing #19

@andreffs18

Description

@andreffs18

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions