wsgiアプリケーションをワープできるwsgiミドルウェアを探しています。これにより、着信および発信のhttpリクエストとヘッダーフィールドを監視できます。
Firefoxのライブヘッダーのようなものですが、サーバー側用です。
wsgiアプリケーションをワープできるwsgiミドルウェアを探しています。これにより、着信および発信のhttpリクエストとヘッダーフィールドを監視できます。
Firefoxのライブヘッダーのようなものですが、サーバー側用です。
Apache スタイルのログが必要な場合は、paste.transloggerを試してください。
しかし、より完全なものについては、非常に便利または安定した場所ではありませんが (ソースにコピーすることもできます)、wsgifilter.proxyapp.DebugHeadersがあります。
そしてWebObを使って書く:
import webob, sys
class LogHeaders(object):
def __init__(self, app, stream=sys.stderr):
self.app = app
self.stream = stream
def __call__(self, environ, start_response):
req = webob.Request(environ)
resp = req.get_response(self.app)
print >> self.stream, 'Request:\n%s\n\nResponse:\n%s\n\n\n' % (req, resp)
return resp(environ, start_response)
ヘッダーだけが必要な場合は、自分で書くのはそれほど難しくありません。それを試してください:
import sys
def log_headers(app, stream=None):
if stream is None:
stream = sys.stdout
def proxy(environ, start_response):
for key, value in environ.iteritems():
if key.startswith('HTTP_'):
stream.write('%s: %s\n' % (key[5:].title().replace('_', '-'), value))
return app(environ, start_response)
return proxy
ミドルウェア
from wsgiref.util import request_uri
import sys
def logging_middleware(application, stream=sys.stdout):
def _logger(environ, start_response):
stream.write('REQUEST\n')
stream.write('%s %s\n' %(
environ['REQUEST_METHOD'],
request_uri(environ),
))
for name, value in environ.items():
if name.startswith('HTTP_'):
stream.write(' %s: %s\n' %(
name[5:].title().replace('_', '-'),
value,
))
stream.flush()
def _start_response(code, headers):
stream.write('RESPONSE\n')
stream.write('%s\n' % code)
for data in headers:
stream.write(' %s: %s\n' % data)
stream.flush()
start_response(code, headers)
return application(environ, _start_response)
return _logger
テスト
def application(environ, start_response):
start_response('200 OK', [
('Content-Type', 'text/html')
])
return ['Hello World']
if __name__ == '__main__':
logger = logging_middleware(application)
from wsgiref.simple_server import make_server
httpd = make_server('', 1234, logger)
httpd.serve_forever()
Armin が書いたwerkzeug デバッガーも参照してください。対話型のデバッグに役立ちます。
mod_wsgiのドキュメントには、mod_wsgiだけでなく、あらゆるWSGIホスティングメカニズムに適用できるデバッグに関するさまざまなヒントが記載されています。見る:
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques
これには、要求と応答をキャプチャするWSGIミドルウェアの例が含まれます。
私の WebCore プロジェクトには、受信リクエストの WSGI 環境全体 (ビーカー セッション、ヘッダーなど)、送信応答のヘッダー、パフォーマンス情報を MongoDB データベースに記録するミドルウェアが少しあります。平均オーバーヘッドは約 4 ミリ秒です。
モジュールはコア パッケージから削除されましたが、独自のパッケージにはまだ統合されていません。この回答の現在のバージョンは、Git 履歴で入手できます。