Facile de journalisation de l'application de débogage avec nginx, uwsgi, flacon?
Je ne suis pas à la recherche à son tour sur le dangereux console de débogage, mais ma demande est d'obtenir une erreur 500 et ne semble pas être l'écriture d'une sortie pour moi d'étudier plus profondément.
J'ai vu cet échange sur la liste de diffusion, qui m'a conduit cette page sur l'enregistrement des erreurs.
Cependant, je trouve toujours cela très confus et ont une ou deux questions:
(1) Dans lequel le fichier doit les trucs ci-dessous aller?
ADMINS = ['[email protected]']
if not app.debug:
import logging
from logging.handlers import SMTPHandler
mail_handler = SMTPHandler('127.0.0.1',
'[email protected]',
ADMINS, 'YourApplication Failed')
mail_handler.setLevel(logging.ERROR)
app.logger.addHandler(mail_handler)
...en supposant que le "grossir" le modèle de fichier pour des applications plus importantes? __init__.py
? config.py
? run.py
?
(2) je suis submergé par les options-t-il, et ne pouvez pas dire à qui je dois utiliser. Qui enregistreurs dois-je allumer, avec les réglages que, pour répliquer les locaux python de débogage du serveur j'arrive à stdout quand je le lance run.py? Je trouve que par défaut, locaux flux de sortie très utile, d'autant plus que le débogueur interactif dans la page. Quelqu'un aurait-il un modèle qu'ils pourraient partager sur la configuration de quelque chose de reproduire ce avec un nginx déploiement, de la sortie d'un journal?
(3) Est-ce que je besoin de changer, pas à la fiole de niveau, mais dans nginx, dire dans mon /etc/nginx/sites-available/appname
fichier, activer la journalisation?
Mise à JOUR
Plus précisément, je suis à la recherche pour obtenir de l'information que je reçois quand python fonctionne localement, pourquoi, par exemple, un paquet n'est pas de travail, ou d'où mon erreur de syntaxe peut-être, ou que la variable n'existe pas:
$ python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from myappname import app
File "/home/me/myappname/myappname/__init__.py", line 27, in <module>
file_handler.setLevel(logging.debug)
File "/usr/lib/python2.7/logging/__init__.py", line 710, in setLevel
self.level = _checkLevel(level)
File "/usr/lib/python2.7/logging/__init__.py", line 190, in _checkLevel
raise TypeError("Level not an integer or a valid string: %r" % level)
Quand je lance le ballon sur un serveur, je n'ai jamais vu cela. Je viens d'obtenir un uWSGI d'erreur dans le navigateur, et n'ont aucune idée de code qui pose problème. Je voudrais juste quelque chose comme ci-dessus pour être écrites dans un fichier.
Je remarque d'ailleurs que la définition de la suite de la journalisation n'a pas vraiment écrire beaucoup de fichier, même quand je tourne le journal jusqu'au niveau de DÉBOGAGE:
from logging import FileHandler
file_handler = FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)
app.logger.addHandler(file_handler)
mylog.log
est vide, même quand ma demande d'erreur.
Je vais aussi ajouter que j'ai essayé de définir debug = True dans l'une des manières suivantes, dans __init__.py
:
app = Flask(__name__)
app.debug = True
app.config['DEBUG'] = True
from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)
app.config.from_object('config')
app.config.update(DEBUG=True)
app.config['DEBUG'] = True
if __name__ == '__main__':
app.run(debug=True)
Alors que dans mon config.py fichier, j'ai...
debug = True
Debug = True
DEBUG = True
Encore, pas de débogage qui se passe, et sans vous connecter ou de débogage, c'est plutôt difficile à traquer. Les erreurs de simplement mettre fin à l'application avec les nations unies, utile navigateur message:
uWSGI Error
Python application not found
- J'ai mis à jour ma réponse basée sur la mise à jour de votre question.
- Avez-vous jamais obtenir ce résolu?
- Je n'ai pas. N'a pas pu obtenir une machine de production hébergé, donné sur flacon.
- Je pense, en regardant en arrière aujourd'hui, c'est probablement que je n'ai pas les autorisations d'écrire n'importe quel serveur de répertoire de l'application était en cours, et en spécifiant un autre endroit pour écrire le journal aurait pris soin de lui.
Vous devez vous connecter pour publier un commentaire.
Ensemble
config['PROPAGATE_EXCEPTIONS']
àTrue
lors de l'application en cours d'exécution dans la production et vous souhaitez un retraçage d'être enregistrées dans des fichiers journaux. (Je n'ai pas essayé avec SMTP gestionnaire, si..)if __name__ == '__main__'
de la clause, c'est à dire votre point d'entrée principal. Je suppose que ce seraitrun.py
.nginx
niveau.Mise à jour: Vous pourriez avoir une clause d'exception qui couvre les exceptions, par exemple
qui doit écrire la traçabilité en amont de toute exception qui s'est produite dans
app.run()
pour le journal.Je sais que c'est un TRÈS vieux post, mais j'ai couru dans la question maintenant, et il m'a fallu un peu pour trouver la solution. Flacon envoie des erreurs sur le serveur. J'étais en train de Gunicorn avec un arriviste script sur Ubuntu 14.04 LTS, et l'endroit où j'ai trouvé les journaux d'erreur a été comme suit:
/var/log/upstart/myapp.log
http://docs.gunicorn.org/en/stable/deploy.html#upstart
Juste au cas où quelque autre pauvre âme qui se termine dans cette situation.