我目前正在開發一個基於flask
的應用程序。它使用app.run()
手動生成服務器。我試圖通過mod_wsgi
現在運行它。奇怪的是,我得到一個500錯誤,並沒有在日誌中。我調查了一下,這裏是我的發現。500 apache日誌中沒有任何東西的錯誤
- 插入像
print >>sys.stderr, "hello"
這樣的行可按預期工作。該消息顯示在錯誤日誌中。 - 在不使用模板的情況下調用方法時,它工作得很好。沒有500錯誤。
- 使用簡單的模板也能正常工作。
- 但是只要我觸發數據庫訪問裏面模板(例如循環查詢)我得到的錯誤。
我的直覺告訴我,它是SQLAlchemy發出錯誤,也許某些日誌記錄配置會導致日誌在應用程序中的某個時刻被丟棄。
此外,爲了測試,我正在使用SQLite。據我所知,這隻能從一個線程訪問。所以如果mod_wsgi
產生更多的線程,它可能會破壞應用程序。
我有點不知所措,因爲它只能在mod_wsgi
後面跑步,這似乎也吞噬了我的錯誤。我能做些什麼來使錯誤冒泡到Apache的error_log中?
僅供參考,代碼見on this github permalink。
http://flask.pocoo.org/docs/errorhandling/也解釋了這一點。如果啓用調試模式,則錯誤將流入apache日誌。一旦你禁用它,你需要建立日誌記錄,否則他們將無處可去。我可以確認'logging.handlers.SMTPHandler'很適合部署的應用程序。 –
@ robots.jpg:我錯過了...有時顯然最好是多次閱讀文檔...;) – exhuma
我相信除了它是非全局的等效:'app.logger.addHandler(logging.StreamHandler(stream = sys.stderr))' – jpmc26