Los mensajes del registrador de Flask como app.logger.info ("Este es un mensaje") no se guardan en los archivos de registro de gunicorn.
Flask no registra mensajes en modo de producción de forma predeterminada porque no hace suposiciones sobre su entorno (http://flask.pocoo.org/docs/errorhandling/). Para que el app.logger de Flask registre mensajes a través de gunicorn, deberá agregar un controlador de registro. Por ejemplo, aquí hay un registrador para stderr de gunicorn:
import logging
import flask
app = flask.Flask(__name__)
@app.before_first_request
def setup_logging():
if not app.debug:
# In production mode, add log handler to sys.stderr.
app.logger.addHandler(logging.StreamHandler())
app.logger.setLevel(logging.INFO)
Esto no es un problema con gunicorn y se puede cerrar.
cerrado por solicitud. ¡Gracias!
¿Gunicorn recoge automáticamente el registro de STDERR?
@benoitc
¿Cómo obligo a gunicorn a recoger el registro de STDERR?
El indicador -R podría ser lo que estás buscando.
http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance
-R no lo hizo por mí.
A continuación se muestra mi configuración
@app.route('/')
def index():
console = logging.StreamHandler()
log = logging.getLogger("asdasd")
log.addHandler(console)
log.setLevel(logging.DEBUG)
log.error("Something")
print >> sys.stderr, "Another thing"
return 'ok'
Así es como lo ejecuto
gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app
Obtengo los registros de gunicorn en /mnt/log/test.log pero ninguno de mis registros de aplicaciones.
Bueno. Puedo entender mal cómo funciona eso, a menos que sea una simple cuestión de
tener que vaciar stderr manualmente (IIRC esto se debe a que se almacena en búfer
cuando gunicorn se bifurca, ¿quizás?)
Pero definitivamente es mucho más fácil controlar a dónde van sus mensajes de registro si
utiliza los registradores de python en lugar de stdio.
El 26 de junio de 2014 a las 13:39, "Yousuf Fauzan" [email protected] escribió:
-R no lo hizo por mí.
A continuación se muestra mi configuración
@app.ruta('/')
índice de definición ():
consola = registro.StreamHandler()
registro = registro.getLogger("asdasd")
log.addHandler(consola)
log.setLevel(registro.DEBUG)
log.error("Algo")
imprimir >> sys.stderr, "Otra cosa"
volver 'bien'Así es como lo ejecuto
gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --servidor de depuración de nivel de registro : aplicación
Obtengo los registros de gunicorn en /mnt/log/test.log pero ninguno de mi aplicación
registros—
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/benoitc/gunicorn/issues/379#issuecomment-47276949 .
Creo que encontré el problema. Aquí hay una entrada en el registro de cambios para 19.00
fix logging: don’t try to redirect stdout/stderr to the logfile.
Acabo de probar con v18 y los registros de StreamHandler se enrutan a registros de gunicorn. ¿Algúna idea de cómo arreglar esto?
@benoitc @tilgovi
@spicavigo gunicorn no redirigirá el stderr al archivo de registro automáticamente. La solución fue eliminar el truco como se discutió en el #591. ¿Probó --error-logfile=-
que muestran los registros en la consola?
Si desea devolver el error directamente al archivo de error, eventualmente puede imprimir en environ['wsgi.errors'] o registrarlo: ee08ac86441e36c3433849b79b3839d1425647fd .
Gracias @benoitc
Ahora estoy iniciando sesión en un archivo en lugar de stderr. Es solo que el cambio ocurrió entre mi desarrollador y me hizo tropezar por completo. Estaba pip install gunicorn y de repente la redirección stderr dejó de funcionar y no me di cuenta de que se debía a un cambio de versión y no a errores en mi código :)
@benoitc ¿Todavía es posible registrar stderr en el archivo de registro de alguna manera?
Comentario más útil
Flask no registra mensajes en modo de producción de forma predeterminada porque no hace suposiciones sobre su entorno (http://flask.pocoo.org/docs/errorhandling/). Para que el app.logger de Flask registre mensajes a través de gunicorn, deberá agregar un controlador de registro. Por ejemplo, aquí hay un registrador para stderr de gunicorn:
Esto no es un problema con gunicorn y se puede cerrar.