我的 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 -
有什么方法可以做到这一点吗?谢谢
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"