Gunicorn: Comment imprimer le journal d'accès sur STDOUT ?

Créé le 19 janv. 2016  ·  22Commentaires  ·  Source: benoitc/gunicorn

Salut,

http://docs.gunicorn.org/en/stable/settings.html#accesslog me dit que '-' sortira sur stderr mais nous préférons STDOUT à des fins de journalisation. Y-a-t-il un moyen de faire ça?

Merci!

Documentation FeaturLogging

Commentaire le plus utile

Avec le fichier d'application myapp.py , j'ai essayé ce qui suit.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Je peux confirmer que la sortie du journal d'accès va à stdout .

Tous les 22 commentaires

La ligne pertinente est ici : https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() par défaut à sys.stderr . Peut-être pourrions-nous modifier accesslog pour accepter "stdout" et "stderr" comme valeurs valides et passer à logging.StreamHandler() .

Une autre solution mais moins flexible :

Le gestionnaire de console imprime déjà sur sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 Nous pourrions définir le gestionnaire sur "console" pour gunicorn.accesslog comme nous l'avons déjà fait pour gunicorn.error dans https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

Je suis confus. Le StreamHandler ne se connecte-t-il pas déjà à sys.stdout ?

OK je comprends maintenant. À l'origine, nous imprimions les journaux sur stdout. IMO, le journal d'accès doit par défaut être STDOUT. Les pensées?

@benoitc :+1:

Accéder au journal sur stdout
Journal des erreurs sur stderr

des mises à jour sur cette demande?

@benoitc Je ne suis pas sûr que ce commit résout ce problème. Disons que je lance gunicorn myapp:app sans arguments supplémentaires. S'attend-on à ce que gunicorn enregistre les enregistrements d'accès sur la sortie standard ? Si c'est le cas, gunicorn ne le fait pas.

Dans https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 sans aucun argument de ligne de commande, self.cfg.accesslog est None et la fonction revient tôt. Autant que je sache, il semble n'y avoir aucun moyen de se connecter à stdout sans spécifier --log-config ou --log-syslog . Est-ce correct?

par défaut, le journal d'accès est désactivé si c'est ce que vous voulez dire ?

@benoitc Oui. La discussion ci-dessus semble indiquer que les journaux d'accès iront à stdout et les journaux d'erreurs à stderr. Cependant, il semble que la journalisation des accès soit désactivée par défaut.

BTW, avec Python 2.7, j'avais l'habitude de pouvoir faire --access-log /dev/stdout --error-log /dev/stderr et cela fonctionnerait. Avec Python 3, passer /dev/stdout comme argument échoue dans https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498

👍 @suriya Je pense que je recherche le même comportement que vous - j'aimerais exécuter --capture-log et activer --access-logfile=<something> , mais je préférerais que mes lignes de journal d'accès aillent sur stdout pas stderr.

EDIT : Pour clarifier, cela semble être simplement un problème avec Python3. En utilisant python3.5.1, passer --access-logfile=/dev/stdout à gunicorn ne démarre pas le serveur.

Oui, il semble que la journalisation des accès soit désactivée par défaut.

@huoxy Plus que la valeur par défaut, je pense que le problème est plus qu'il n'y a pas de moyen simple d'écrire les journaux d'accès sur la sortie standard.

@huoxy ˋ--access-logfile=-` devrait faire l'affaire. laissez-moi savoir si ce n'est pas le cas.

  • Benoît
    Le mercredi 27 juillet 2016 à 08h49, Suriya Subramanian [email protected]
    a écrit:

@huoxy https://github.com/huoxy Plus que la valeur par défaut, je pense
le problème est plus qu'il n'y a pas de moyen simple d'écrire des journaux d'accès sur
sortie standard.


Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

aussi c'est probablement un problème de doc. mais le journal d'accès doit être imprimé sur stdout
lorsque - est utilisé. sinon c'est un bug. Fais-moi savoir...
Le mer. 27 juil. 2016 à 09:03, Benoit Chesneau [email protected] a écrit :

@huoxy ˋ--access-logfile=-` devrait faire l'affaire. laissez-moi savoir si ce n'est pas le cas.

  • Benoît
    Le mercredi 27 juillet 2016 à 08h49, Suriya Subramanian [email protected]
    a écrit:

@huoxy https://github.com/huoxy Plus que la valeur par défaut, je pense
le problème est plus qu'il n'y a pas de moyen simple d'écrire des journaux d'accès sur
sortie standard.


Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc Comme mentionné dans # 1293, gunicorn --access-log - enregistre les accès à l'erreur standard. J'ai essayé avec gunicorn --access-log=- et le journal passe toujours à l'erreur standard.

selon ce:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

l'enregistreur par défaut est console qui sort sur stdout, donc je suppose que si vous avez besoin de tout pour stdout comme moi, pour que tout arrive au pilote de journalisation gunicorn, vous pouvez simplement laisser ces options vides.

De plus, la solution que je suggérerais consiste à créer un lien symbolique pour les fichiers journaux vers /dev/stdout ou /dev/stderror si cela ne fonctionne pas directement :

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

Je viens de passer à gunicorn 19.7.0 sorti la semaine dernière. Malheureusement, je n'arrive toujours pas à écrire le journal d'accès sur autre chose que stderr.

J'ai essayé d'exécuter gunicorn sans options et aussi avec toutes les permutations d'inclure/ne pas inclure "--access-logfile=- --error-logfile=- --log-level=DEBUG".

Ai-je raté quelque chose de fondamental sur la journalisation de gunicorn? Est-ce que quelque chose de mon environnement ou de Django saigne et cause ce problème?

Avec le fichier d'application myapp.py , j'ai essayé ce qui suit.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Je peux confirmer que la sortie du journal d'accès va à stdout .

Je suis sur Python 2.7.14. (En quelque sorte, j'ai raté la réponse rapide il y a des mois.)

Vous pouvez également utiliser accesslog = "-" dans votre gunicorn.config.py

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