title: Logging response body in Flask WSGI request/response wrapper
body: <p>I'm working on a Flask application and want to log incomming requests and outgoing responses before Flask kicks in. To do this I am using a wrapper around WSGI. I have it working for the request part, but need some pointers on the response part.</p>
  
  <p>This is the code I have so far.</p>
  
  <pre><code>import logging
  import pprint
  
  from cStringIO import StringIO
  
  log = logging.getLogger(__name__)
  
  
  class WSGIRequestResponseLogging(object):
      """
      This wrapper works independently from Flask and wraps the WSGI application. It shows exactly what
      request is going in and what response is going out.
  
      http://werkzeug.pocoo.org/docs/0.11/wrappers/
      """
  
      def __init__(self, app):
          self._app = app
  
      def __call__(self, environ, start_response):
          log.debug(pprint.pprint(('REQUEST', environ)))
  
          if environ.get('REQUEST_METHOD') == 'POST':
              length = environ.get('CONTENT_LENGTH', '0')
              length = 0 if length == '' else int(length)
  
              if length == 0:
                  log.debug("REQUEST_BODY: EMPTY")
              else:
                  body = environ['wsgi.input'].read(length)
                  log.debug("REQUEST_BODY: " + body)
                  # After reading the body it is removed, restore it
                  environ['wsgi.input'] = StringIO(body)
  
          def log_response(status, headers, *args):
              log.debug(pprint.pprint(('RESPONSE', pprint.pprint(('RESPONSE', status, headers)))))
  
              return start_response(status, headers, *args)
  
          return self._app(environ, log_response)
  </code></pre>
  
  <p>How can I log the response body in log_response?</p>
  
  <p>Regards, nidkil</p>