Gunicorn: Journaliser les messages de l'app.logger de Flask

Créé le 19 juil. 2012  ·  11Commentaires  ·  Source: benoitc/gunicorn

Les messages de l'enregistreur de Flask tels que app.logger.info("Ceci est un message") ne sont pas enregistrés dans les fichiers journaux de gunicorn.

Commentaire le plus utile

Flask n'enregistre pas les messages en mode production par défaut car il ne fait aucune hypothèse sur votre environnement (http://flask.pocoo.org/docs/errorhandling/). Pour que l'app.logger de Flask enregistre les messages via gunicorn, vous devrez ajouter un gestionnaire de journalisation. Par exemple, voici un enregistreur du 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)

Ce n'est pas un problème avec le gunicorn et peut être fermé.

Tous les 11 commentaires

Flask n'enregistre pas les messages en mode production par défaut car il ne fait aucune hypothèse sur votre environnement (http://flask.pocoo.org/docs/errorhandling/). Pour que l'app.logger de Flask enregistre les messages via gunicorn, vous devrez ajouter un gestionnaire de journalisation. Par exemple, voici un enregistreur du 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)

Ce n'est pas un problème avec le gunicorn et peut être fermé.

fermé par demande. Merci!

Gunicorn récupère-t-il automatiquement le journal de STDERR ?

@benoitc
Comment puis-je forcer gunicorn à sélectionner le journal de STDERR?

Le drapeau -R pourrait être ce que vous recherchez.

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance

-R ne l'a pas fait pour moi.

Ci-dessous ma configuration

@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'

Voici comment je le lance

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

Je reçois les journaux gunicorn dans /mnt/log/test.log mais aucun de mes journaux d'application.

D'accord. Je peux mal comprendre comment cela fonctionne, à moins que ce ne soit une simple question de
avoir à vider stderr manuellement (IIRC c'est parce qu'il devient tamponné
quand les fourchettes gunicorn, peut-être ?)

Mais il est certainement beaucoup plus facile de contrôler où vont vos messages de journal si
vous utilisez les enregistreurs python au lieu de stdio.
Le 26 juin 2014 à 13h39, "Yousuf Fauzan" [email protected] a écrit :

-R ne l'a pas fait pour moi.

Ci-dessous ma configuration

@app.route('/')
def index() :
console = logging.StreamHandler()
log = logging.getLogger("asdasd")
log.addHandler(console)
log.setLevel(logging.DEBUG)
log.error("Quelque chose")
print >> sys.stderr, "Autre chose"
retourner 'd'accord'

Voici comment je le lance

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level debug server:app

Je reçois les journaux gunicorn dans /mnt/log/test.log mais aucune de mes applications
journaux.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/benoitc/gunicorn/issues/379#issuecomment -47276949.

Je pense avoir trouvé le problème. Voici une entrée dans le changelog pour 19.00

fix logging: don’t try to redirect stdout/stderr to the logfile.

Je viens d'essayer avec v18 et les journaux de StreamHandler sont acheminés vers les journaux gunicorn. Une idée de comment résoudre ce problème ?
@benoitc @tilgovi

@spicavigo gunicorn ne redirigera pas automatiquement le stderr vers le fichier journal. Le correctif consistait à supprimer le hack comme il a été discuté dans # 591 . Avez-vous essayé --error-logfile=- qui affiche les journaux sur la console ?

Si vous souhaitez renvoyer directement l'erreur dans le fichier d'erreurs, vous pouvez éventuellement imprimer sur environ['wsgi.errors'] ou l'enregistrer : ee08ac86441e36c3433849b79b3839d1425647fd .

Merci @benoitc

Je me connecte maintenant à un fichier au lieu de stderr. C'est juste que le changement s'est produit entre mes développeurs et ça m'a totalement fait trébucher. J'étais pip install gunicorn et tout à coup la redirection stderr a cessé de fonctionner et je ne savais pas que c'était à cause d'un changement de version et non à cause de bogues dans mon code :)

@benoitc Est-il toujours possible de connecter stderr au fichier journal d'une manière ou d'une autre?

Cette page vous a été utile?
0 / 5 - 0 notes