langgenius / dify

Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.
https://dify.ai
Other
46.21k stars 6.52k forks source link

Can I print a detailed request log? #8357

Closed liutao-python closed 1 week ago

liutao-python commented 1 week ago

Self Checks

1. Is this request related to a challenge you're experiencing? Tell me about your story.

It is hoped that the request log can be printed in the service, including the request view function, request method and other information. When the request ends, printing takes time.

2. Additional context or comments

No response

3. Can you help us with this feature?

dosubot[bot] commented 1 week ago

Hello @liutao-python! I'm here to help you with any bugs, questions, or contributions you might have. I'm an expert in software development and technical support and I'm looking forward to assisting you.

Yes, you can print a detailed request log in the Dify service. You can extend the existing after_request function in the api/app.py file to log the request details, including the request view function, request method, and other information. Here is an example of how you can modify the after_request function to include detailed logging:

import logging
from flask import request

@app.after_request
def after_request(response):
    """Add Version headers to the response and log request details."""
    response.set_cookie("remember_token", "", expires=0)
    response.headers.add("X-Version", app.config["CURRENT_VERSION"])
    response.headers.add("X-Env", app.config["DEPLOY_ENV"])

    # Log request details
    logging.info(f"Request Method: {request.method}")
    logging.info(f"Request Path: {request.path}")
    logging.info(f"Request Args: {request.args}")
    logging.info(f"Request Form: {request.form}")
    logging.info(f"Request JSON: {request.json}")
    logging.info(f"Response Status: {response.status}")
    logging.info(f"Response Time: {response.elapsed.total_seconds()} seconds")

    return response

This will log the request method, path, arguments, form data, JSON payload, response status, and response time after each request is processed.

Additionally, ensure that your logging configuration is set up to capture these logs. You can adjust the verbosity or detail level of the logs in the opensearch_dashboards.yml file:

logging.verbose: true

This setting will log all events, including system usage information and all requests [1].

To continue talking to Dosu, mention @dosu.

liutao-python commented 1 week ago

Yes, I know it can be extended, but I would prefer to have these things built into the project, I think it is a basic function of a service

crazywoola commented 1 week ago

Please open a issue here https://github.com/langgenius/dify-sandbox instead.