我正在尝试使用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
它似乎脱离了背景或其他东西。
答案 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)