2012-08-12 259 views
7

我試圖用app.logger.error('')在裝飾函數中記錄錯誤,但它不起作用。另外我不能調試這口井和我只能看到來自HTTP客戶端的響應:用燒瓶記錄錯誤

(我使用的nginx + uwsgi +燒瓶)

HTTP/1.1 502錯誤的網關

服務器:nginx

日期:孫老師,2012年8月12日15時45分09秒GMT

的Content-Type:text/html的

的Content-Length:14

連接:保持活躍

一切同列線的偉大工程:app.logger.error('panic !!!')

def mydecorator(): 
    def decorator(f): 
     def wrapped_function(*args, **kwargs): 
      try: 
       ip = Mytable.query.filter_by(ip=request.remote_addr).first() 
      except: 
       app.logger.error('panic !!!') 
      else: 
       dootherthing() 

      resp = make_response(f(*args, **kwargs)) 
      h = resp.headers 
      h['add-this-header'] = ":)" 
      return resp 
     return update_wrapper(wrapped_function, f) 
    return decorator 

看來,這是斷章取義之類的東西。

回答

9

事實上,wasnt能夠檢測應用程序實例斷章取義,我解決了這個使用CURRENT_APP裝飾:

1日。導入方法:from flask import current_app

2nd。追加任何應用類CURRENT_APP:。current_app.logger.error('panic !!!')

信息@http://flask.pocoo.org/docs/api/#flask.current_app

「指向應用程序處理請求這對於那些希望通過 身邊支持並行運行多個應用程序 擴展有用這是由應用程序上下文驅動,而不是由 請求上下文驅動,因此您可以使用 app_context()方法更改此代理的值。「

0

app在您發佈的腳本中的任何位置定義的?

另外,爲了幫助調試,在測試時應該考慮使用run()方法和debug mode

app.run(debug=True) 
+0

我不能,燒瓶應用程序使用ENVIRON從nginx的增值經銷商,當我在調試模式下運行它,它凍結 – Alvarolm 2012-08-12 20:53:50

+2

@Alvarolm:也許你應該考慮重新設計應用程序,以便您可以使用腳本命令運行應用程序線。這將允許您在調試模式下運行以進行測試。否則,您將花費大量時間嘗試調試代碼,而沒有清楚地瞭解錯誤。 – 2012-08-12 20:56:38

+0

這是一個凝灰岩的決定,順便說一句app.debug =真不適用 – Alvarolm 2012-08-12 21:01:02