7

を使用してデコレータ関数でエラーをログに記録しようとしていますが、機能しapp.logger.error('')ません。さらに、これをうまくデバッグできず、httpクライアントからの応答しか見ることができません。

(私はnginx + uwsgi + flaskを使用しています)

HTTP /1.1502不正なゲートウェイ

サーバー:nginx

日付:2012年8月12日日曜日15:45:09 GMT

コンテンツタイプ:text / html

コンテンツの長さ: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

文脈から外れているようです。

4

2 に答える 2

9

実際、デコレータはコンテキスト外のアプリインスタンスを検出できませんでした。current_appを使用してこれを解決します。

1日 メソッドをインポートします。from flask import current_app

2位。current_appに任意のアプリクラスを追加します。 current_app.logger.error('panic !!!')

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

「リクエストを処理するアプリケーションを指します。これは、並行して実行される複数のアプリケーションをサポートする拡張機能に役立ちます。これは、リクエストコンテキストではなく、アプリケーションコンテキストによって強化されるため、次を使用してこのプロキシの値を変更できます。 app_context()メソッド。」

于 2012-08-16T13:19:34.453 に答える
0

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

また、デバッグを容易にするために、テスト時にデバッグ モードrun()でメソッドを使用することを検討する必要があります。

app.run(debug=True)
于 2012-08-12T20:36:18.223 に答える