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.
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:
Recibo el esperado HTTP 200 "Hello World / n" en respuesta.
Hay un rastro de la solicitud en
/var/log/demo/access.log
./var/log/demo/error.log
permanece igual (solo existen los eventos de arranque).Hay una línea de "Salida directa" en el terminal.
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