from owslogger.asgi import RequestLoggingMiddleware as BaseRequestLoggerMiddleware from owslogger.constants import AUTOLOG_MESSAGE from starlette.requests import Request from starlette.routing import Route class RequestLoggerMiddleware(BaseRequestLoggerMiddleware): def _log_request(self, request: Request, status_code: int) -> None: message = AUTOLOG_MESSAGE.format( status=status_code, verb=request.method, resource=self._get_sanitized_path(request), ) self.logger.log( level=self._get_log_level(status_code), msg=message, ) @staticmethod def _get_sanitized_path(request: Request) -> str: if ( "route" in request.scope and isinstance(request.scope["route"], Route) and "token" in request.path_params ): path_params = request.path_params.copy() path_params["token"] = "[hidden]" return request.scope["route"].path_format.format(**path_params) return request.url.path