your logs log found for errors check application python logging flask uwsgi

found - uWSGI/Flask/Python logs se detienen después de un tiempo



no python application found, check your startup logs for errors (2)

Tengo una configuración uWSGI / Flask utilizando registradores de Python. Aunque los registros solo de algunos trabajadores llegan a los registros y, después de algún tiempo, incluso aquellos dejan de aparecer. Mi hipótesis es que cuando uWSGI reinicia (clones) los trabajadores, el registro de alguna manera se rompe. ¿Algunas ideas?

app/server.py :

app = Flask(...) handler = logging.StreamHandler() app.logger.addHandler(handler) app.run()

uWSGI:

uwsgi --emperor /etc/uwsgi/apps-enabled/*.ini --die-on-term --uid www-data --gid www-data --logto /var/www/app.com/logs/uwsgi/emperor.log --socket /tmp/uwsgi/emperor.sock --enable-threads --master --single-interpreter --log-reopen --chmod-socket=770

Las aplicaciones habilitadas / app-0.ini y las aplicaciones habilitadas / app-1.ini se ven así:

module=server:app enable-threads=true single-interpreter=true master=true chdir=/var/www/app.com/app env=APPLICATION_ENVIRONMENT=production venv=/var/www/app.com/virtualenv logto=/var/www/app.com/logs/uwsgi/app.com-0.log log-reopen=true chmod-socket=770 buffer-size=65535 lazy-apps=true max-requests=5000 heartbeat=15 for=0 1 2 3 4 5 6 7 socket=/tmp/uwsgi/app.0.%(_).sock endfor= processes=8 map-socket=0:1 map-socket=1:2 map-socket=2:3 map-socket=3:4 map-socket=4:5 map=socket=5:6 map=socket=6:7 map=socket=7:8

También he intentado usar SysLogHandler con el mismo resultado.


Lo que si puedo asegurar es que reiniciar uwsgi no debe detener el registro. Tengo el servidor nginx-uwsgi-django y reinicio mi servidor uwsgi todo el tiempo y mis registros nunca se detienen. A continuación se muestra el aspecto de mi archivo ini: es posible que pueda modificar su archivo ini de este modo y ver si funciona.

1 #mysite_uwsgi.ini 2 [uwsgi] 3 4 # Django-related settings 5 # the base directory (full path) 6 chdir = /home/user/bdapps_stage 7 # Django''s wsgi file 8 module = mysite.wsgi:application 9 # the virtualenv (full path) 10 home = /home/user/.conda/envs/mysite_env/ 11 12 # process-related settings 13 # master 14 master = true 15 # maximum number of worker processes 16 processes = 3 17 # maximum number of threads to use 18 # threads 19 # the socket (use the full path to be safe 20 socket = /home/user/mysite/mysite.sock 21 # ... with appropriate permissions - may be needed 22 chmod-socket = 666 23 #set the sockets listen queue size 24 #listen 25 # clear environment on exit 26 vacuum = true

Y aquí es como reinicio mi uwsgi

kill -SIGHUP [pid id of your uwsgi master]

Tenga en cuenta que el comando que ha proporcionado para uwsgi utilizando el archivo ini solo debe usarse una vez para iniciar el servidor uwsgi. Cuando quiera reiniciar, le sugiero que anote el pid del maestro uwsgi usando

ps -ef | grep uwsgi

y ejecute el comando kill anterior.


No estoy seguro de que esto sea de ayuda en su caso, pero puede intentar usar el bifurcación de publicaciones en uWSGI.

El decorador de postfork es justo el boleto. Puedes declarar múltiples tareas postfork. Cada función decorada se ejecutará en secuencia después de cada fork() .

@postfork def init_logging(): app.logger.addHandler(handler)

O puede especificar lazy-apps=true en su uwsgi.ini .

Para detalles: http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html y http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html