es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar dinámicamente el nivel de registro en uvicorn.

Tengo una API Fastapi ejecutándose con uvicorn. Utilizo el registro de uvicorn de la siguiente manera:

if __name__ == & amp; quote; __ main__ & amp; quote;:
    uvicorn.run (& amp; quote; main: app & amp; quote ;, host = host, port = int (port), reload = True, log_level = log_level,
                log_config = & amp; quote; config / logging.yaml & amp; quote;)

Lo que me gustaría lograr es poder cambiar el nivel de registro a través de un endpoint. Algo como:

python
@app.put("/api/log/{level}")
def change_log_level(level):
#algo que cambie el nivel de registro.

Intenté hacer una variable global log_level, pero no funcionó y no estoy seguro de cómo cambiarla ya que el nivel de registro está en la instrucción uvicorn.run. También está en el archivo config.yaml, así que no estoy seguro de dónde cambiarlo… Estoy dispuesto a probar el registro con otra biblioteca si es necesario.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr la capacidad de cambiar el nivel de log mediante un endpoint en FastAPI, se puede utilizar el módulo de registro (logging) en Python.

    En primer lugar, se debe eliminar el parámetro “log_level” de “uvicorn.run()” y establecer el nivel de registro directamente mediante el módulo de registro. Por ejemplo, para establecer el nivel de registro en INFO:

    import logging
    import uvicorn
    
    if __name__ == "main":
        logging.basicConfig(level=logging.INFO)
        uvicorn.run("main:app", host=host, port=int(port), reload=True, log_config="config/logging.yaml")
    

    Luego, en el endpoint de FastAPI, se puede establecer el nivel de registro utilizando el método “basicConfig” del módulo de registro:

    import logging
    
    @app.put("/api/log/{level}")
    def change_log_level(level: str):
        logging.basicConfig(level=level.upper())
        return {"message": f"Se ha establecido el nivel de registro en {level.upper()}"}
    

    Ahora, cuando se realiza una solicitud PUT a “/api/log/{level}”, el endpoint “change_log_level” establecerá el nivel de registro en el valor especificado y devolverá un mensaje indicando el nuevo nivel de registro.

Comments are closed.