2015-06-17 3 views
18

Ich habe eine uWSGI/Flask Setup mit Python Loggern. Obwohl Protokolle nur von einigen Arbeitern zu den Protokollen kommen, und nach einiger Zeit auch jene aufhören, überhaupt aufzutreten. Meine Hypothese ist, dass, wenn uWSGI Arbeiter neu startet (Klone), die Protokollierung irgendwie kaputt geht. Irgendwelche Ideen?uWSGI/Flask/Python Logs stoppen nach einiger Zeit

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 

apps-enabled/app-0.ini und Apps-enabled/app-1.ini sieht wie folgt aus:

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 

Ich habe auch versucht, SysLogHandler mit dem gleichen Ergebnis zu verwenden.

+0

ich das gleiche Problem auftritt. Nach einer Weile wird nichts mehr protokolliert. Ich verwende flask/uwsgi/nginx. –

+0

Hi, hast du es geschafft, dieses Problem zu lösen? Seit gestern in dieselbe Sache gerannt und nirgendwohin! –

+0

@ bool.dev, ich habe immer noch keine Lösung gefunden. Endlich wieder zurück zur Standard-uwsgi-Protokollierung. –

Antwort

0

Ich kann Ihnen sicher sagen, dass der Neustart von uwsgi nicht aufhören sollte zu protokollieren. Ich habe nginx-uwsgi-django Server und ich starte meinen uwsgi Server die ganze Zeit neu und meine Logs hören nie auf. Hier ist, wie meine Ini-Datei aussieht: Vielleicht können Sie Ihre Ini-Datei so anpassen und sehen, ob es funktioniert.

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 

Und hier ist, wie ich meine uwsgi

kill -SIGHUP [pid id of your uwsgi master] 

Bitte beachten Sie neu starten, dass der Befehl, den Sie für uwsgi zur Verfügung gestellt haben, die INI-Datei verwenden, sollte nur einmal verwendet werden, um den uwsgi Server zu starten. Wenn Sie neu starten möchten, empfehle ich Ihnen die pid des uwsgi Master notieren von

ps -ef | grep uwsgi 

verwenden und die oben Kill-Befehl auszuführen.

1

Ich bin nicht sicher, dass dies in Ihrem Fall helfen wird, aber Sie können versuchen, post forking in uWSGI zu verwenden.

Der postfork Dekorateur ist nur das Ticket. Sie können mehrere Postfork-Aufgaben deklarieren. Jede dekorierte Funktion wird nacheinander nach jeder fork() ausgeführt.

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

Oder Sie können lazy-apps=true in Ihrem uwsgi.ini angeben.

Einzelheiten: http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html und http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

Verwandte Themen