2012-11-04 71 views
6

我一直試圖讓這個工作很長一段時間,但我真的在我的智慧結束現在。我試圖做所有我可以在SO和燒瓶文檔中找到的東西,但仍然無法處理簡單的錯誤日誌,因此我可以調試我的應用程序。下面是粘貼的代碼 -mod_wsgi記錄瓶錯誤

# main.py 
from flask import Flask 
import logging 

app = Flask(__name__) 
file_handler = logging.FileHandler(filename='/tmp/election_error.log') 
file_handler.setLevel(logging.WARNING) 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    return "hello 
    #missing quotes to generate error 

if __name__ == "__main__": 
    app.run() 


#wsgi file 
import sys 
import logging 
sys.path.insert(0, "/var/www/voting_app") 
logging.basicConfig(stream=sys.stderr) 
from main import app as application 


# apache2 conf file 
WSGIDaemonProcess voting_app threads=5 
WSGIScriptAlias /election /var/www/voting_app/voting_app.wsgi 

LogLevel info 

<Directory /var/www/voting_app> 
     WSGIProcessGroup voting_app 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
</Directory> 

請告訴我我哪裏出錯了。非常感謝。

回答

3

您需要生成一個運行時異常,而不是編譯時異常。缺少的報價是編譯時異常,您的日誌代碼將永遠不會執行。

只是拋出一個異常,而不是:在WSGI腳本文件的

@app.route('/') 
def hello(): 
    raise Exception('Deliberate exception raised') 
+0

This Works!但其他錯誤呢?這是我創建的一個虛擬main.py。我有一個給我500錯誤,但日誌文件看起來是空的?我能做些什麼來捕獲開發服務器上顯示的各種錯誤!謝謝 – Prakhar

+0

@Prakhar:你可以捕捉*大多數*例外。只是沒有語法錯誤,在部署之前測試你的代碼來捕獲這些錯誤。 –

+0

如果您仍然在生產中看到500錯誤,那麼您的燒瓶代碼沒有運行;這可能是一個配置錯誤或語法錯誤,你不能捕捉這樣的。檢查你的WSGI服務器的日誌。 –

5

創建特定的錯誤,這是一個語法錯誤,會造成故障,即使在mod_wsgi的加載。這個錯誤會以Apache錯誤日誌文件結束,而不是使用日誌記錄模塊設置的日誌文件。你看過Apache錯誤日誌文件嗎?

對於在執行請求期間引發的異常,Flask默認會將其轉換爲500錯誤頁面,否則將禁止顯示詳細信息。您需要設置瓶郵寄或每其他方式登錄,例如運行時異常:

http://flask.pocoo.org/docs/errorhandling/

如果你要顯示一個運行時異常的500頁面返回給瀏覽器的開發目的,你需要啓用Flask調試模式。這是通過設置app.debug是真正做到:

http://flask.pocoo.org/docs/config/?highlight=app%20debug

你不應該在面向生產系統中的用戶啓用調試模式。