2012-08-12 7 views
7

app.logger.error('')を使用してデコレータ機能でエラーをログに記録しようとしていますが、機能しません。また、私はよくデバッグにこれをカントと私は唯一のHTTPクライアントからの応答を見ることができます:フラスコのログエラー

HTTP/1.1 502不正なゲートウェイ

を(私はnginxの+ uwsgi +フラスコ使用しています)に

サーバー:nginxの

日:日、2012年8月12日十五時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

、コンテキストのうち、アプリのインスタンスを検出することができデコレータ波平、私はこの使用してCURRENT_APP解決:

第一に。メソッドをインポートします。from flask import current_app

2nd。 CURRENT_APPするために、任意のアプリケーションのクラスを追加します。要求を処理するアプリケーションにhttp://flask.pocoo.org/docs/api/#flask.current_app

「ポイント@current_app.logger.error('panic !!!')

情報をこれが 並んで実行している複数のアプリケーションをサポートしたい 拡張のために有用である。これはあります。アプリケーションコンテキストによって提供され、 要求コンテキストではないため、 のapp_context()メソッドを使用してこのプロキシの値を変更できます。

0

投稿したスクリプトのどこにでもappが定義されていますか?

また、デバッグに役立つようにするには、run()メソッドをdebug modeで使用することを検討する必要があります。実際に

app.run(debug=True) 
+0

私はカント、フラスコアプリはnginxのからのenviron VARSを使用し、私はデバッグモードでそれを実行すると、それは – Alvarolm

+2

@Alvarolmをフリーズ:コマンドからスクリプトを使用してアプリケーションを実行できるように、おそらくあなたは、アプリケーションを再設計を検討してくださいライン。これにより、テスト目的でデバッグモードで実行できます。さもなければ、何が間違っているのか明確なアイデアがなければ、コードをデバッグしようとして多くの時間を費やしています。 –

+0

これは凝った判断です、btw app.debug = True does doesnt too – Alvarolm