在Flask WSGI请求/响应包装器中记录响应主体
我正在开发一个Flask应用程序,希望在Flask启动之前记录输入请求和输出响应。为此,我在WSGI周围使用了一个包装器。我让它在请求部分工作,但在响应部分需要一些指针 这是我目前掌握的代码在Flask WSGI请求/响应包装器中记录响应主体,flask,wsgi,werkzeug,Flask,Wsgi,Werkzeug,我正在开发一个Flask应用程序,希望在Flask启动之前记录输入请求和输出响应。为此,我在WSGI周围使用了一个包装器。我让它在请求部分工作,但在响应部分需要一些指针 这是我目前掌握的代码 import logging import pprint from cStringIO import StringIO log = logging.getLogger(__name__) class WSGIRequestResponseLogging(object): """ Th
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)
如何在log_response中记录响应主体
关于nidkil,请参见mod_wsgi网站上的示例代码:
mod_wsgi-express
,则此审核功能是内置的
mod_wsgi-express start-server --enable-recorder wsgi.py
像做梦一样工作。谢谢你,格雷厄姆!