【问题标题】:logging errors with flask使用烧瓶记录错误
【发布时间】:2012-08-09 03:59:14
【问题描述】:

我正在尝试使用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

好像是断章取义什么的。

【问题讨论】:

    标签: python oop decorator flask uwsgi


    【解决方案1】:

    事实上,装饰器无法检测到应用程序实例脱离上下文,我使用 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() 方法。”

    【讨论】:

      【解决方案2】:

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

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

      app.run(debug=True)
      

      【讨论】:

      • 我不能,flask 应用程序使用来自 nginx 的环境变量,当我在调试模式下运行它时它会冻结
      • @Alvarolm:也许您应该考虑重新设计应用程序,以便您可以使用命令行脚本运行应用程序。这将允许您在调试模式下运行以进行测试。否则,您将花费大量时间尝试调试代码,却不清楚问题所在。
      • @Alvarolm:我建议先修复 app.debug 问题,然后再处理其他问题。拥有调试模式会对您有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2013-12-25
      • 2018-04-15
      相关资源
      最近更新 更多