2016-12-16 2 views
0

Selon les docs (http://docs.pylonsproject.org/projects/waitress/en/latest/):Comment puis-je rediriger la journalisation des serveurs de python pyramid vers stdout sur heroku?

Serveuse envoie sa sortie d'enregistrement (y compris exception d'application de rendus) à l'objet enregistreur Python serveuse nommée. Vous pouvez influencer le niveau du consignateur et le flux de sortie à l'aide de l'API de module de journalisation Python normale.

C'est tout ce que la documentation a à dire. J'essaie de rediriger la sortie de journalisation vers stdout. Comment ferais-je cela dans le fichier .ini de pastedeploy?

+0

double possible de [Pourquoi mon niveau de journal ne sont pas utilisés lors de l'utilisation de loadapp paste.deploy?] (Http://stackoverflow.com/questions/19058215/why-is-my-log-level- non-être-utilisé-lors de l'utilisation de-loadapp-from-paste-deploy) –

Répondre

0

Etes-vous en train d'enregistrer les demandes à serveuse? Je ne pourrais jamais le faire fonctionner aussi. Si je posais la question sur l'OS il y a quelques années, quelqu'un a dit que cela ne pouvait pas être fait. Pour un travail autour j'ai ajouté une pyramide "abonné" qui fait toute la journalisation pour chaque demande.

Modifier.

Lors de l'examen de mon code, j'ai arrêté d'utiliser un abonné et est passé à l'utilisation d'une interpolation pour la consignation. Les deux façons fonctionneront.

tweens.py

import logging 
log = logging.getLogger(__name__) 

def simple_tween_factory(handler, registry): 
    # one-time configuration code goes here 

    def simple_tween(request): 
     # code to be executed for each request before 
     # the actual application code goes herE         

      response = handler(request) 

    # code to be executed for each request after 
    # the actual application code goes here 

      path_qs = request.path_qs 
      status = response.status 
      log.debug('[{0}] {1}'.format(status, path_qs))     ##See the path and query string for every response 

      return response 

return simple_tween 

Ajouter à votre configuration Pyramid

config.add_tween('{}.tweens.simple_tween_factory'.format(<your app name>)) 
+0

Je suis sur heroku, et tout ce qui ne va pas à stdout est noir troué. Pouvez-vous élaborer un peu sur votre solution de contournement et/ou lier quelque chose pour me lancer? Je suis plutôt coincé. –

+0

Regardez les documents de la pyramide pour ajouter une interpolation. Cela fonctionne aussi sur heroku. Je vais poster le code dans ma réponse dans un peu –

+0

J'ai ajouté tout le code de mon iPhone. Cela devrait être correct. Faites-moi savoir si vous avez des problèmes –

0

Ainsi, le problème semble être que la documentation de migration officielle de Heroku (http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/heroku.html) ne vous dire que vous avez besoin pour initialiser l'enregistreur pour serveuse avant l'initialisation de l'application. Sinon, rien n'est consigné.

Donc, ma question était incorrecte. Ce n'est pas que la diagraphie allait se produire, c'était que l'exploitation forestière n'allait nulle part.

La solution consiste à apporter les modifications suivantes à votre fichier runapp.py.

import os 

#from paste.deploy import loadapp 
import pyramid.paster 
from waitress import serve 

if __name__ == "__main__": 
    port = int(os.environ.get("PORT", 5000)) 
    #app = loadapp('config:production.ini', relative_to='.') 
    pyramid.paster.setup_logging('production.ini') 
    app = pyramid.paster.get_app('production.ini') 

    serve(app, host='0.0.0.0', port=port) 
+0

Cela a également été répondu par Michael ici: http://stackoverflow.com/questions/19058215/why-is-my-log-level-not-being-used-when -using-loadapp-de-coller-déployer –