2013-04-20 6 views
23

मैं dangerous debugging console चालू करने के लिए नहीं देख रहा हूं, लेकिन मेरे आवेदन में 500 त्रुटि हो रही है और मुझे अधिक गहराई से जांच करने के लिए मेरे लिए कोई आउटपुट लिखना प्रतीत नहीं होता है।nginx, uwsgi, फ्लास्क के साथ आसान एप्लिकेशन लॉगिंग/डिबगिंग?

मैंने this exchange on the mailing list देखा, जिसने मुझे to this page on logging errors का नेतृत्व किया।

हालांकि, मैं अभी भी इस बहुत भ्रमित खोजने के लिए और सवालों की एक जोड़ी है:

(1) जो फ़ाइल में सामान नीचे जाना चाहिए?

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) 

... बड़े अनुप्रयोगों के लिए "बड़ा हो रहा है" फ़ाइल पैटर्न मानते हुए? __init__.py? config.py? run.py?

(2) मैं वहां विकल्पों से अभिभूत हूं, और यह नहीं बता सकता कि मुझे किसका उपयोग करना चाहिए। स्थानीय पायथन सर्वर डीबग को दोहराने के लिए, किन सेटिंग्स के साथ, मुझे कौन से लॉगर्स चालू करना चाहिए, जब मैं run.py चलाता हूं तो मैं stdout पर जाता हूं? मुझे लगता है कि पृष्ठ में इंटरैक्टिव डीबगर की तुलना में डिफ़ॉल्ट, स्थानीय आउटपुट स्ट्रीम बहुत उपयोगी है। क्या किसी के पास कोई पैटर्न है जो वे किसी nginx परिनियोजन के साथ इसे दोहराने के लिए कुछ लॉग सेट करने पर साझा कर सकते हैं, लॉग पर आउटपुट कर सकते हैं?

(3) क्या मुझे कुछ भी बदलने की जरूरत है, फ्लास्क स्तर पर नहीं, बल्कि nginx में, लॉगिंग सक्षम करने के लिए, मेरी /etc/nginx/sites-available/appname फ़ाइल में कहें?

अद्यतन

विशेष रूप से, मैं जैसे मैं क्यों, कहते हैं, एक पैकेज काम नहीं कर रहा है, या जहां हो सकता है मेरी सिंटैक्स त्रुटि के रूप में स्थानीय रूप से जब अजगर रन प्राप्त जानकारी के लिए देख रहा हूँ, या क्या चर नहीं करता ' टी मौजूद है:

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

जब मैं किसी सर्वर पर फ्लास्क चलाता हूं, तो मैं इसे कभी नहीं देखता। मुझे बस ब्राउज़र में एक यूडब्ल्यूएसजीआई त्रुटि मिलती है, और मुझे पता नहीं है कि कौन सा कोड समस्याग्रस्त था। मुझे बस उपरोक्त की तरह कुछ फ़ाइल में लिखा जाना पसंद है।

मैं भी ध्यान दें कि निम्न लॉगिंग की स्थापना वास्तव में फाइल करने के लिए ज्यादा नहीं लिखा था, यहाँ तक कि जब मैं डीबग स्तर पर जिस तरह से लॉग बारी:

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

mylog.log खाली है, तब भी जब अपने आवेदन त्रुटियों बाहर।

मैं भी जोड़ देंगे __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) 

जबकि मेरे config.py फ़ाइल में, मैं है ...

debug = True 
Debug = True 
DEBUG = True 

फिर भी, कोई डिबगिंग नहीं होती है, और बिना लॉगिंग या डिबगिंग के, यह ट्रैक करना मुश्किल है। हिस्सा जहां संचालकों बनाने

uWSGI Error 
Python application not found 
+0

मैंने आपके अपडेट किए गए प्रश्न के आधार पर अपना उत्तर अपडेट किया। –

+2

क्या आपको कभी यह हल हुआ है? – hafichuk

+0

मैंने नहीं किया। फ्लास्क पर छोड़ दिया गया उत्पादन मशीन नहीं मिल सका। – Mittenchops

उत्तर

2
  1. , वालों आदि को जोड़ने के if __name__ == '__main__' खंड है, यानी अपने मुख्य प्रवेश बिंदु में होना चाहिए: त्रुटियाँ बस अन-उपयोगी ब्राउज़र संदेश के साथ आवेदन समाप्त। मुझे लगता है कि run.py होगा।
  2. मुझे यकीन नहीं है कि मैं इसका उत्तर दे सकता हूं - यह आपके इच्छित चीज़ों पर निर्भर करता है। मैं विभिन्न विकल्प उपलब्ध देखने के लिए logging tutorial को देख सलाह देंगे।
  3. मुझे विश्वास नहीं है कि आपको nginx स्तर पर कुछ भी बदलने की आवश्यकता है।

अद्यतन: आप एक अपवाद खंड है कि ध्यान में न आया अपवादों को शामिल किया गया है करने के लिए, उदाहरण के लिए चाहते हो सकता है

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

जो किसी भी अपवाद जो लॉग में app.run() में हुई ट्रैस बैक लिखना चाहिए।

7

config['PROPAGATE_EXCEPTIONS'] से True उत्पादन में ऐप चलाते समय सेट करें और आप लॉग फ़ाइलों में ट्रेसबैक लॉग इन करना चाहते हैं। (मैंने एसएमटीपी हैंडलर के साथ कोशिश नहीं की है, हालांकि ..)

1

मुझे पता है कि यह एक बहुत पुरानी पोस्ट है, लेकिन मैं अब इस मुद्दे पर भाग गया, और मुझे समाधान खोजने में थोड़ा सा लगा। फ्लास्क सर्वर में त्रुटियां भेजता है। मैं Ubuntu 14.04 LTS पर एक नवोदय स्क्रिप्ट के साथ Gunicorn चल रहा था, और जगह है जहाँ मैं त्रुटि लॉग पाया इस प्रकार थी:

/var/log/upstart/myapp.log

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

शायद ज़रुरत पड़े कुछ अन्य गरीब आत्मा में समाप्त होता है यह स्थिति।

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