2016-06-27 1 views
3

J'utilise le serveur wsgi pour générer les serveurs de mon application Web. J'ai un problème avec la journalisation de l'information.Connexion avec l'application serveur et flasque WSGI

Voici comment je courais l'application

from gevent import monkey; monkey.patch_all() 
from logging.handlers import RotatingFileHandler 
import logging 
from app import app # this imports app 

# create a file to store weblogs 
log = open(ERROR_LOG_FILE, 'w'); log.seek(0); log.truncate(); 
log.write("Web Application Log\n"); log.close(); 

log_handler = RotatingFileHandler(ERROR_LOG_FILE, maxBytes =1000000, backupCount=1) 

formatter = logging.Formatter(
    "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s" 
    ) 
log_handler.setFormatter(formatter) 
app.logger.setLevel(logging.DEBUG) 
app.logger.addHandler(log_handler) 

# run the application 
server= wsgi.WSGIServer(('0.0.0.0', 8080), app) 
server.serve_forever() 

Cependant, sur l'exécution de l'application, il est rien l'exploitation forestière. Je suppose que cela doit être dû au serveur WSGI car app.logger fonctionne en l'absence de WSGI. Comment puis-je enregistrer des informations lors de l'utilisation de WSGI?

Répondre

3

Selon le gevent uwsgi documentation vous devez passer votre objet de gestionnaire de journal à l'objet WSGIServer à la création:

journal - Si donné, un objet avec une méthode d'écriture à laquelle les journaux de demande (accès) sera etre ecrit. Si ce n'est pas le cas, par défaut sys.stderr. Vous pouvez passer None pour désactiver la journalisation des demandes. Vous pouvez utiliser un wrapper, par exemple, la journalisation, pour prendre en charge les objets qui n'implémentent pas une méthode d'écriture. (Si vous passez une instance de l'enregistreur, ou quelque chose de général qui fournit une méthode de journal, mais pas une méthode d'écriture, un tel emballage sera automatiquement créé et il sera connecté au niveau INFO.)

error_log - Si donné, un objet semblable à un fichier avec des méthodes write, writelines et flush auxquelles les journaux d'erreur seront écrits. Si ce n'est pas le cas, par défaut sys.stderr. Vous pouvez passer None pour désactiver la journalisation des erreurs (non recommandé). Vous pouvez utiliser un wrapper, par exemple, la journalisation, pour prendre en charge les objets qui n'implémentent pas les méthodes appropriées. Ce paramètre deviendra la valeur de wsgi.errors dans l'environnement WSGI (s'il n'est pas déjà défini). (Comme journal, des enveloppes pour les instances de l'enregistreur, etc. seront automatiquement créés et enregistrés au niveau ERROR.)

donc vous devriez être en mesure de faire wsgi.WSGIServer(('0.0.0.0', 8080), app, log=app.logger)

+1

il devrait être 'log = app. logger' sinon il est dit 'l'objet log n'a pas de fonction d'écriture'. Merci d'avance! – mousecoder

+0

Je vais mettre à jour ma réponse, s'il vous plaît accepter si cela a fonctionné pour vous! – pech0rin