7

我正在尝试使用在装饰器函数中记录错误app.logger.error(''),但它不起作用。另外我不能很好地调试这个,我只能看到来自 http 客户端的响应:

(我使用的是 nginx+uwsgi+flask)

HTTP/1.1 502 错误网关

服务器:nginx

日期:2012 年 8 月 12 日星期日 15:45:09 GMT

内容类型:文本/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 解决了这个问题:

第一个。导入方法:from flask import current_app

第二。将任何应用程序类附加到 current_app: current_app.logger.error('panic !!!')

信息@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 回答