api/logging/http_info.py (30 lines of code) (raw):
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