2015-06-17 8 views
18

मेरे पास पाइथन लॉगर्स का उपयोग करके एक यूडब्ल्यूएसजीआई/फ्लास्क सेटअप है। हालांकि कुछ श्रमिकों से केवल लॉग लॉग होते हैं और कुछ समय बाद भी वे दिखने लगते हैं। मेरी परिकल्पना यह है कि जब यूडब्ल्यूएसजीआई (क्लोन) श्रमिकों को फिर से शुरू करता है, तो लॉगिंग किसी भी तरह टूट जाती है। कोई विचार?uWSGI/फ्लास्क/पायथन लॉग कुछ समय बाद बंद हो जाते हैं

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 

क्षुधा-सक्षम/एप्लिकेशन-0.ini और क्षुधा सक्षम इस तरह/एप्लिकेशन-1.ini देखो:

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 

मैंने उसी परिणाम के साथ SysLogHandler का उपयोग करने का भी प्रयास किया है।

+0

मैं एक ही समस्या का सामना कर रहा हूँ। थोड़ी देर बाद कुछ भी लॉग नहीं हो जाता है। मैं फ्लास्क/uwsgi/nginx का उपयोग कर रहा हूँ। –

+0

हाय, तो क्या आपने इस समस्या को हल करने का प्रबंधन किया? कल से ही, और कहीं भी एक ही मुद्दे में भाग गया! –

+0

@ bool.dev, मुझे अभी भी कोई समाधान नहीं मिला है। अंत में डिफ़ॉल्ट uwsgi लॉगिंग पर वापस लौट आया। –

उत्तर

0

मैं आपको यह सुनिश्चित करने के लिए कह सकता हूं कि uwsgi को पुनरारंभ करना लॉगिंग बंद नहीं करना चाहिए। मेरे पास nginx-uwsgi-django सर्वर है और मैं हर समय अपना uwsgi सर्वर पुनरारंभ करता हूं और मेरे लॉग कभी नहीं रुकते हैं। यहां मेरी आईएनआई फ़ाइल इस तरह दिखती है: हो सकता है कि आप इसके अनुसार अपनी आईएनआई फ़ाइल को ट्विक कर सकें और देखें कि यह काम करता है या नहीं।

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 

और यहाँ कैसे मैं अपने uwsgi पुनः आरंभ है

kill -SIGHUP [pid id of your uwsgi master] 

कृपया ध्यान दें कि आदेश आप uwsgi के लिए प्रदान की है INI फ़ाइल का उपयोग करते हुए केवल एक बार इस्तेमाल किया जाना चाहिए uwsgi सर्वर शुरू करने के लिए। आप पुनः आरंभ करना चाहते हैं, मैं सुझाव है कि आप

ps -ef | grep uwsgi 

का उपयोग करके uwsgi गुरु की पीआईडी ​​को नोट और ऊपर मार कमांड चलाएँ।

1

मुझे यकीन नहीं है कि इससे आपके मामले में मदद मिलेगी, लेकिन आप यूडब्ल्यूएसजीआई में पोस्ट फोर्किंग का उपयोग करने का प्रयास कर सकते हैं।

postfork सजावटी सिर्फ टिकट है। आप एकाधिक पोस्टफर्क कार्यों की घोषणा कर सकते हैं। प्रत्येक सजाए गए फ़ंक्शन प्रत्येक fork() के बाद अनुक्रम में निष्पादित किया जाएगा।

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

या फिर आप अपने uwsgi.ini में lazy-apps=true निर्दिष्ट कर सकते हैं।

जानकारी के लिए: http://uwsgi-docs.readthedocs.io/en/latest/PythonDecorators.html और http://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

संबंधित मुद्दे