feat: add debug log for request and response (#19781) -- reformatted based on comment (thanks to @QuantumGhost)
parent
457149dfac
commit
b0051dce39
@ -0,0 +1,61 @@
|
|||||||
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import flask
|
||||||
|
from flask import Flask
|
||||||
|
from flask.signals import request_finished, request_started
|
||||||
|
|
||||||
|
from configs import dify_config
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def init_app(app: Flask):
|
||||||
|
"""Initialize the request logging extension."""
|
||||||
|
if not dify_config.ENABLE_REQUEST_LOGGING:
|
||||||
|
return
|
||||||
|
|
||||||
|
@request_started.connect_via(app)
|
||||||
|
def log_request_started(sender, **extra):
|
||||||
|
"""Log the start of a request."""
|
||||||
|
if not logger.isEnabledFor(logging.DEBUG):
|
||||||
|
return
|
||||||
|
|
||||||
|
request = flask.request
|
||||||
|
content_type = request.content_type
|
||||||
|
if request.data and "application/json" in content_type.lower():
|
||||||
|
try:
|
||||||
|
json_data = json.loads(request.data)
|
||||||
|
formatted_json = json.dumps(json_data, ensure_ascii=False, indent=2)
|
||||||
|
logger.debug(
|
||||||
|
"Received Request %s -> %s, Request Body:\n%s",
|
||||||
|
request.method,
|
||||||
|
request.path,
|
||||||
|
formatted_json,
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Failed to parse JSON request")
|
||||||
|
else:
|
||||||
|
logger.debug("Received Request %s -> %s", request.method, request.path)
|
||||||
|
|
||||||
|
@request_finished.connect_via(app)
|
||||||
|
def log_request_finished(sender, response, **extra):
|
||||||
|
"""Log the end of a request."""
|
||||||
|
if not logger.isEnabledFor(logging.DEBUG) or response is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
if response.content_type and "application/json" in response.content_type.lower():
|
||||||
|
try:
|
||||||
|
response_data = response.get_data(as_text=True)
|
||||||
|
json_data = json.loads(response_data)
|
||||||
|
formatted_json = json.dumps(json_data, ensure_ascii=False, indent=2)
|
||||||
|
logger.debug(
|
||||||
|
"Response %s %s, Response Body:\n%s",
|
||||||
|
response.status,
|
||||||
|
response.content_type,
|
||||||
|
formatted_json,
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Failed to parse JSON response")
|
||||||
|
else:
|
||||||
|
logger.debug("Response %s %s", response.status, response.content_type)
|
||||||
Loading…
Reference in New Issue