2015-09-22 3 views
12

में दिखाई नहीं देता है, मैं uWSGI और nginx के साथ अपना फ्लास्क एप्लिकेशन चला रहा हूं। एक 500 त्रुटि है, लेकिन ट्रेसबैक ब्राउज़र या लॉग में प्रकट नहीं होता है। मैं फ्लास्क से ट्रेसबैक कैसे लॉग करूं?फ्लास्क एप्लिकेशन ट्रेसबैक सर्वर लॉग

uwsgi --http-socket 127.0.0.1:9000 --wsgi-file /var/webapps/magicws/service.py --module service:app --uid www-data --gid www-data --logto /var/log/magicws/magicapp.log 

यूडब्ल्यूएसजीआई लॉग केवल 500 स्थिति कोड दिखाता है, न कि ट्रेसबैक। Nginx लॉग में कुछ भी नहीं है।

[pid: 18343|app: 0|req: 1/1] 127.0.0.1() {34 vars in 642 bytes} 
[Tue Sep 22 15:50:52 2015] 
GET /getinfo?color=White => generated 291 bytes in 64 msecs (HTTP/1.0 500) 
2 headers in 84 bytes (1 switches on core 0) 

उत्तर

19

1 करने के लिए FLASK_DEBUG वातावरण चर सेट करके डिबग मोड में चलाएँ।

export FLASK_DEBUG=1 # use `set` on Windows 
flask run 

आप अभी भी app.run (अब बोतल 0.11 में अनुशंसित) का उपयोग कर रहे हैं, तो debug=True गुजरती हैं।

if __name__ == '__main__': 
    app.run(debug=True) 

अब टर्मिनल और सामान्य 500 त्रुटि पृष्ठ के बजाय ब्राउज़र में एक स्टैक ट्रेस दिखाई देना चाहिए।


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

फ्लास्क मानक पायथन लॉगिंग लाइब्रेरी का उपयोग त्रुटियों को लॉग करने के लिए कॉन्फ़िगर किया जा सकता है। फ़ाइल में फ्लास्क के लॉग संदेश भेजने के लिए निम्न डालें।

import logging 
handler = logging.FileHandler('/path/to/app.log') # errors logged to this file 
handler.setLevel(logging.ERROR) # only log errors and above 
app.logger.addHandler(handler) # attach the handler to the app's logger 

पायथन logging मॉड्यूल के बारे में और पढ़ें। विशेष रूप से आप बदलना चाहते हैं कि त्रुटियां लॉग इन हैं, या केवल त्रुटियों से अधिक रिकॉर्ड करने के लिए स्तर को बदलें।

फ्लास्क में आपके आवेदन को लॉग इन करने के तरीके पर instructions भी है।

1

OP answer कोड में डीबग ध्वज सेटिंग को अस्थायी रूप से हल कर सकता है, लेकिन कोड को पर्यावरण से डीबग चर पढ़ने जैसे रखने की कोशिश करें। आप this जैसी परियोजनाओं का उपयोग कर सकते हैं।

from envparse import env 
app.debug = env('DEBUG', cast=bool) 

इस तरह से उपयोग करके, आप आसानी से पर्यावरण से डीबग मोड स्विच कर सकते हैं। फिर पर्यावरण चर सेट करने के लिए प्रक्रिया प्रबंधक सेटिंग्स का उपयोग करें।

कल का नवाब (Ubuntu 14.04 में डिफ़ॉल्ट)

# /etc/init/uwsgiapp.conf 
env DEBUG=true 
script 
    // upstart exec section 
end script 

systemd (उबंटू 16.04 में डिफ़ॉल्ट, आर्क)

[Service] 
Environment="DEBUG=true" 
# other parts 

आप तो प्रक्रिया प्रबंध तंत्र builtin आप कर सकते हैं ओएस उपयोग कर रहे हैं लॉग/var/log section

सुपरवी sord

[program:flask] 
environment=DEBUG=true 
# or use FLASK_DEBUG = 1 
+0

बोतल ही वातावरण चर ('FLASK_DEBUG') का उपयोग डिबग मोड स्विच करता है। 'App.debug' सेट करना कई मामलों में अपेक्षित काम नहीं करेगा, इसकी अनुशंसा नहीं की जाती है। – davidism

+0

@ डेविडिज्म ध्वज के बारे में उल्लेख करने के लिए संपादित किया गया है, अगर आपके पास कोई सुझाव है तो संपादित करें –

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