workers loglevel log error debug python logging flask gunicorn

python - loglevel - ¿Por qué la aplicación Flask no está creando ningún registro cuando está alojado por Gunicorn?



gunicorn time (2)

Cuando utiliza python3 server.py está ejecutando el script server3.py.

Cuando gunicorn server:flaskApp ... estás ejecutando el script de inicio de gunicornio que luego importa el server módulos y busca la variable flaskApp de flaskApp en ese módulo.

Dado que se está importando server.py __name__ var contendrá "server" , no "__main__" y, por lo tanto, el código de instalación del controlador de registro no se está ejecutando.

Simplemente podría mover el código de configuración del controlador de registro fuera de la if __name__ == "__main__": stanza. Pero asegúrese de mantener flaskApp.run() allí ya que no desea que se ejecute cuando el server importación de gunicornio.

Más sobre qué hace if __name__ == “__main__”: ¿hacer?

Estoy intentando agregar el registro a una aplicación web que usa Flask.

Cuando se aloja usando el servidor incorporado (es decir, python3 server.py ), el inicio de sesión funciona. Cuando se aloja usando Gunicorn, el archivo de registro no se crea.

El código más simple que reproduce el problema es este:

#!/usr/bin/env python import logging from flask import Flask flaskApp = Flask(__name__) @flaskApp.route(''/'') def index(): flaskApp.logger.info(''Log message'') print(''Direct output'') return ''Hello World/n'' if __name__ == "__main__": logHandler = logging.FileHandler(''/var/log/demo/app.log'') logHandler.setLevel(logging.INFO) flaskApp.logger.addHandler(logHandler) flaskApp.logger.setLevel(logging.INFO) flaskApp.run()

La aplicación se llama utilizando:

gunicorn server:flaskApp -b :80 -w 4 --access-gfile /var/log/demo/access.log --error-logfile /var/log/demo/error.log

Al hacer una solicitud a la página de inicio del sitio, sucede lo siguiente:

  1. Recibo el esperado HTTP 200 "Hello World / n" en respuesta.

  2. Hay un rastro de la solicitud en /var/log/demo/access.log .

  3. /var/log/demo/error.log permanece igual (solo existen los eventos de arranque).

  4. Hay una línea de "Salida directa" en el terminal.

  5. No hay ''/var/log/demo/app.log''. Si creo el archivo antes de iniciar la aplicación, el archivo no se modifica.

Tenga en cuenta que:

  • El directorio /var/log/demo se puede acceder (leer, escribir, ejecutar) por todos, por lo que este no es el problema de permisos.

  • Si agrego StreamHandler como un segundo controlador, todavía no hay ningún rastro del mensaje "Registrar mensaje" ni en el terminal, ni en los archivos de registro de Gunicorn.

  • Gunicorn se instala utilizando pip3 install gunicorn , por lo que no debería haber ninguna discrepancia con las versiones de Python.

¿Qué esta pasando?


Este enfoque funciona para mí: importe el módulo de registro de Python y añada los manejadores de errores de gunicorn. Luego, su registrador iniciará sesión en el archivo de registro de errores de gunicornio:

import logging app = Flask(__name__) gunicorn_error_logger = logging.getLogger(''gunicorn.error'') app.logger.handlers.extend(gunicorn_error_logger.handlers) app.logger.setLevel(logging.DEBUG) app.logger.debug(''this will show in the log'')

La secuencia de comandos de inicio de My Gunicorn está configurada para generar entradas de registro en un archivo como esta:

gunicorn main:app / --workers 4 / --bind 0.0.0.0:9000 / --log-file /app/logs/gunicorn.log / --log-level DEBUG / --reload