用烧瓶记录错误

时间:2012-08-12 20:15:32

标签: python oop decorator flask uwsgi

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

(我正在使用nginx + uwsgi + flask)

  

HTTP / 1.1 502 Bad Gateway

     

服务器: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

它似乎脱离了背景或其他东西。

2 个答案:

答案 0 :(得分:9)

事实上,装饰者无法在上下文中检测到app实例,我使用current_app解决了这个问题:

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

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

  

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

     

“指向处理请求的应用程序。这对于有用   希望支持多个应用程序运行的扩展   侧。这是由应用程序上下文驱动而不是由   请求上下文,因此您可以使用更改此代理的值   app_context()方法。“

答案 1 :(得分:0)

是否在您发布的脚本中的任何位置定义了app

另外,为了帮助调试,在测试时,您应该考虑将run()方法与debug mode一起使用。

app.run(debug=True)