Gunicorn: Registrar mensajes de Flask's app.logger

Creado en 19 jul. 2012  ·  11Comentarios  ·  Fuente: benoitc/gunicorn

Los mensajes del registrador de Flask como app.logger.info ("Este es un mensaje") no se guardan en los archivos de registro de gunicorn.

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:

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.

Todos 11 comentarios

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?

¿Fue útil esta página
0 / 5 - 0 calificaciones