from typing import Union from flask import Request, Response def log_request_body_and_headers(_logger, request: Request): details = __get_http_info(request) details['path'] = request.path if request.args: details['params'] = request.args if 'serverless.event' in request.environ: env = request.environ.get('serverless.event') if 'requestContext' in env and 'requestId' in env.get('requestContext'): details['apigw-request-id'] = env.get('requestContext').get('requestId') _logger.info(details) def log_response_body_and_headers(_logger, response: Response): details = __get_http_info(response) _logger.info(details) def __get_http_info(r: Union[Request,Response]) -> dict: headers = __filter_headers(r.headers) details = {'headers': headers} try: body = r.json if body: details['body'] = body except: pass return details def __filter_headers(headers: dict): """ utility function to remove sensitive information from request headers """ _headers = dict(headers) _headers.pop('Cookie', None) _headers.pop('X-CSRF-Token', None) return _headers