2012-08-12 22 views
7

Estoy intentando registrar un error en una función de decorador usando app.logger.error(''), pero simplemente no funciona. Además no puedo depurar esta bien y sólo puedo ver la respuesta del cliente http:errores de registro con el matraz

(estoy usando nginx + + uwsgi frasco)

HTTP/1.1 502 Pasarela incorrecta

servidor: nginx

Fecha: Dom 12 Agos 2012 15:45:09 GMT

Content-Type: text/html

Content-Length: 14

conexion: keep-alive

Todo funciona muy bien con la línea: 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 

Parece que está fuera de contexto o algo así.

Respuesta

9

de hecho, el decorador no era capaz de detectar la instancia aplicación fuera de contexto, puedo solucionar esto usando CURRENT_APP:

primero. Importe el método: from flask import current_app

2do. añadir cualquier clase de aplicación para CURRENT_APP:.. current_app.logger.error('panic !!!')

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

"apunta a la manipulación de la solicitud de aplicación Esto es útil para extensiones que quieren dar soporte a múltiples aplicaciones que se ejecutan de lado a lado Esta es impulsado por el contexto de la aplicación y no por el contexto de solicitud , por lo que puede cambiar el valor de este proxy utilizando el método app_context() ".

0

¿Se ha definido app en cualquier lugar del script que haya publicado?

Además, para ayudar con la depuración, al realizar pruebas, debe considerar utilizar el método run() con debug mode.

app.run(debug=True) 
+0

no puedo, la aplicación utiliza frasco Environ vars de Nginx y cuando lo ejecuto en modo de depuración se congela – Alvarolm

+2

@Alvarolm: Tal vez usted debería considerar el rediseño de la aplicación para que pueda ejecutar la aplicación utilizando un script del comando línea. Esto le permitirá ejecutar en modo de depuración para fines de prueba. De lo contrario, pasará mucho tiempo tratando de depurar el código sin una idea clara de lo que está mal. –

+0

eso es una decisión toba, por cierto app.debug = True tampoco funciona – Alvarolm

Cuestiones relacionadas