Log error_body in api.raw_request (#4131)
This commit is contained in:
committed by
GitHub
parent
ef3d88c1b9
commit
d01b4faec3
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
import structlog
|
import structlog
|
||||||
|
from starlette.concurrency import iterate_in_threadpool
|
||||||
|
|
||||||
from skyvern.config import settings
|
from skyvern.config import settings
|
||||||
|
|
||||||
@@ -49,6 +50,20 @@ def _sanitize_body(request: Request, body: bytes, content_type: str | None) -> s
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_response_body_str(response: Response) -> str:
|
||||||
|
response_body = b""
|
||||||
|
async for chunk in response.body_iterator:
|
||||||
|
response_body += chunk
|
||||||
|
response.body_iterator = iterate_in_threadpool(iter([response_body]))
|
||||||
|
|
||||||
|
try:
|
||||||
|
return response_body.decode("utf-8")
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
return str(response_body)
|
||||||
|
except Exception:
|
||||||
|
return str(response_body)
|
||||||
|
|
||||||
|
|
||||||
async def log_raw_request_middleware(request: Request, call_next: Callable[[Request], Awaitable[Response]]) -> Response:
|
async def log_raw_request_middleware(request: Request, call_next: Callable[[Request], Awaitable[Response]]) -> Response:
|
||||||
if not settings.LOG_RAW_API_REQUESTS:
|
if not settings.LOG_RAW_API_REQUESTS:
|
||||||
return await call_next(request)
|
return await call_next(request)
|
||||||
@@ -70,10 +85,14 @@ async def log_raw_request_middleware(request: Request, call_next: Callable[[Requ
|
|||||||
|
|
||||||
if response.status_code >= 500:
|
if response.status_code >= 500:
|
||||||
log_method = LOG.error
|
log_method = LOG.error
|
||||||
|
error_body = await _get_response_body_str(response)
|
||||||
elif response.status_code >= 400:
|
elif response.status_code >= 400:
|
||||||
log_method = LOG.warning
|
log_method = LOG.warning
|
||||||
|
error_body = await _get_response_body_str(response)
|
||||||
else:
|
else:
|
||||||
log_method = LOG.info
|
log_method = LOG.info
|
||||||
|
error_body = None
|
||||||
|
|
||||||
log_method(
|
log_method(
|
||||||
"api.raw_request",
|
"api.raw_request",
|
||||||
method=http_method,
|
method=http_method,
|
||||||
@@ -81,6 +100,7 @@ async def log_raw_request_middleware(request: Request, call_next: Callable[[Requ
|
|||||||
status_code=response.status_code,
|
status_code=response.status_code,
|
||||||
body=body_text,
|
body=body_text,
|
||||||
headers=sanitized_headers,
|
headers=sanitized_headers,
|
||||||
|
error_body=error_body,
|
||||||
)
|
)
|
||||||
return response
|
return response
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Reference in New Issue
Block a user