2017-01-04 6 views
0

Flaskアプリケーションを開発していて、Flaskが起動する前に、リクエストと送信応答を記録したいと思います。これを行うには、WSGIのラッパーを使用しています。私はそれが要求部分のために働いているが、応答部分のいくつかのポインタが必要です。Flask WSGIリクエスト/レスポンスラッパーのロギングレスポンスボディ

これはこれまでのコードです。

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にレスポンス本文を記録できますか?これは、任意のWSGIサーバで動作するはず

答えて

2

nidkil

よろしく、でmod_wsgiのサイト上のコード例を参照してください。

mod_wsgi-expressを使用していた場合は、この監査機能が組み込まれています。

mod_wsgi-express start-server --enable-recorder wsgi.py 
+0

夢のように動作します。グラハムに感謝します! – nidkil

関連する問題