动态更改 uvicorn 中的日志级别
Dynamically change logs level in uvicorn
我有一个 Fastapi API 运行 uvicorn。我像这样使用 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.
传递的无效级别
我有一个 Fastapi API 运行 uvicorn。我像这样使用 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.