run deploy application app and python logging nginx flask uwsgi

deploy - python django nginx uwsgi



Fácil registro de aplicaciones/depuración con nginx, uwsgi, matraz? (3)

  1. La parte donde crea manejadores, agregue a registradores, etc. debe estar en la cláusula if __name__ == ''__main__'' , es decir, su punto de entrada principal. Supongo que sería run.py
  2. No estoy seguro de poder responder a esto, depende de lo que quieras. Aconsejaría mirar el tutorial de registro para ver las diferentes opciones disponibles.
  3. No creo que necesites cambiar nada en el nivel nginx .

Actualización: es posible que desee tener una cláusula de excepción que cubra excepciones no detectadas, por ejemplo

if __name__ == ''__main__'': try: app.run(debug=True) except Exception: app.logger.exception(''Failed'')

que debe escribir el rastreo de cualquier excepción que se haya producido en app.run() en el registro.

No estoy buscando activar la peligrosa consola de depuración , pero mi aplicación está recibiendo un error de 500 y no parece estar escribiendo ningún resultado para que investigue más a fondo.

Vi este intercambio en la lista de correo , que me llevó a esta página sobre errores de registro .

Sin embargo, todavía encuentro esto muy confuso y tengo un par de preguntas:

(1) ¿En qué archivo debe ir el material a continuación?

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)

... ¿asumiendo el patrón de archivo "cada vez más grande" para aplicaciones más grandes? __init__.py ? config.py ? run.py ?

(2) Estoy abrumado por las opciones allí, y no puedo decir cuál debo usar. ¿Qué registradores debo activar, con qué configuración, para replicar la depuración del servidor local de python, obtengo stdout cuando ejecuto run.py? Encuentro que la secuencia de salida local predeterminada es muy útil, más que el depurador interactivo en la página. ¿Alguien tiene un patrón que podrían compartir al configurar algo que replica esto con una implementación de nginx, generando un registro?

(3) ¿Hay algo que necesite cambiar, no en el nivel del matraz, sino en nginx, por ejemplo en mi /etc/nginx/sites-available/appname , para habilitar el registro?

ACTUALIZAR

Específicamente, estoy buscando información como la que obtengo cuando Python se ejecuta localmente sobre por qué, por ejemplo, un paquete no funciona, o dónde podría estar mi error de sintaxis, o qué variable no existe:

$ 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)

Cuando ejecuto el matraz en un servidor, nunca veo esto. Acabo de recibir un error uWSGI en el navegador y no tengo idea de qué código fue problemático. Me gustaría que algo así se escriba en un archivo.

También me doy cuenta de que establecer el siguiente registro realmente no escribía mucho al archivo, incluso cuando cambio el registro al nivel de DEPURACIÓN:

from logging import FileHandler file_handler = FileHandler(''mylog.log'') file_handler.setLevel(logging.DEBUG) app.logger.addHandler(file_handler)

mylog.log está en blanco, incluso cuando mi aplicación se equivoca.

También agregaré que he intentado configurar debug = True de las siguientes maneras, en __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)

Mientras estoy en mi archivo config.py, tengo ...

debug = True Debug = True DEBUG = True

Sin embargo, no se produce ninguna depuración, y sin el registro o la depuración, es bastante difícil de rastrear. Los errores simplemente finalizan la aplicación con el mensaje del navegador no útil:

uWSGI Error Python application not found


Establezca config[''PROPAGATE_EXCEPTIONS''] en True cuando ejecuta la aplicación en producción y desea que los registros se inicien en los archivos de registro. (No he probado con el controlador SMTP, sin embargo ..)


Sé que esta es una publicación MUY antigua, pero me encontré con el problema ahora, y me llevó un poco encontrar la solución. Flask envía errores al servidor. Estaba ejecutando Gunicorn con un script upstart en Ubuntu 14.04 LTS, y el lugar donde encontré los registros de errores fue el siguiente:

/var/log/upstart/myapp.log

http://docs.gunicorn.org/en/stable/deploy.html#upstart

Solo en caso de que algún otro pobre alma termine en esta situación.