[英]Dynamically change logs level in uvicorn
我有一个运行 uvicorn 的 Fastapi API。 我像这样使用 uvicorn 日志记录:
if __name__ == "__main__":
uvicorn.run("main:app", host=host, port=int(port), reload=True, log_level=log_level,
log_config="config/logging.yaml")
我想要实现的是能够通过端点更改 log_level。 就像是:
@app.put("/api/log/{level}")
def change_log_level(level):
#something that changes the log level.
我试图创建一个全局变量log_level
但它不起作用,我不确定如何更改它,因为 log_level 在uvicorn.run
指令中。 它也在 config.yaml 文件中,所以我不确定是否要更改它...
如果需要,我愿意尝试使用另一个库进行日志记录
你可以尝试这样的事情:
@app.put("/api/log/{level}")
def change_log_level(level):
logging_level = your_function_to_map_url_level_to_logging_level(level)
logging.getLogger('uvicorn').setLevel(logging_level)
您可能想为上面的记录器'uvicorn'
执行此操作,或者可能是'uvicorn.access'
或'uvicorn.error'
,或这些的任何组合。
有一个uvicorn.config.LOG_LEVELS
字典将字符串(如'critical'
映射到logging.CRITICAL
等。您可能希望在your_function_to_map_url_level_to_logging_level
中使用它,但您需要处理通过 URL 传入的无效级别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.