如何测量Flask API响应时间并将其记录在日志中?

问题描述 投票:0回答:1

我的 Flask API 有一个日志系统

import logging

def setup_logger(logp=None, debug=False):
    log_level = logging.DEBUG if debug else logging.INFO
    form = "[%(asctime)s][%(name)s][%(levelname)s][%(filename)s] %(message)s"
    datefmt = "%Y-%m-%d-%H:%M:%S"
    logging.basicConfig(level=log_level, format=form, datefmt=datefmt)
    if logp is not None:
        fhandler = logging.StreamHandler(open(logp, 'a'))
        fhandler.setFormatter(logging.Formatter(form, datefmt))
        logging.root.addHandler(fhandler)


logger = logging.getLogger("MY_APP")
setup_logger()
logger.debug(f"Import {__file__}")

日志看起来像:

[2024-04-19-04:20:02][werkzeug][INFO][_internal.py] 172.23.0.2 - - [19/Apr/2024 04:20:02] "GET /available/space HTTP/1.1" 200 -

但是,我想测量并记录我的 Flask API 响应时间,并将它们添加到日志中,例如

0.45 s
,以便查看哪个 API 处理程序速度较慢。

期望的行为是这样的:

[2024-04-19-04:20:02][werkzeug][INFO][_internal.py][0.45 s] 172.23.0.2 - - [19/Apr/2024 04:20:02] "GET /available/space HTTP/1.1" 200 -

有什么方法可以做到这一点吗?谢谢

python flask logging
1个回答
0
投票

您可以使用

before_request
after_request
在所有路线上实现此效果。我们将使用
g
来存储请求的开始时间,您可以从
request.endpoint
获取函数名称。

我还没有为此示例设置日志记录本身,但是注入您自己的日志记录机制代替

print()
应该很简单。

from flask import Flask, g, request
import time

app = Flask(__name__)

@app.before_request
def log_route_start():
    g.start_time = time.time()
    
@app.after_request
def log_route_end(response):
    route = request.endpoint
    print(f"{route} ended after {time.time() - g.pop('start_time', None)}")
    return response

@app.route('/test', methods=['GET'])
def test():
    time.sleep(1)
    return "Hello"

@app.route('/test2', methods=['GET'])
def test2():
    time.sleep(0.5)
    return "Bye"
© www.soinside.com 2019 - 2024. All rights reserved.