#python #logging #uvicorn
Вопрос:
У меня есть API Fastapi, работающий с 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, поэтому я не совсем уверен, что нужно было его менять…
Я готов попробовать ведение журнала с помощью другой библиотеки, если это необходимо
Ответ №1:
Вы могли бы попробовать что-то вроде этого:
@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'
to logging.CRITICAL
и т. Д. Возможно , вы захотите использовать это your_function_to_map_url_level_to_logging_level
, но вам нужно будет обрабатывать недопустимые уровни, передаваемые по URL-адресу.
Комментарии:
1. вы не знаете, есть ли для чего-нибудь документация ?
uvicorn.config.LOG_LEVELS
не смог ничего найти…2. @Од Нет, я использовал исходный код …