我正在尋找一個wsgi中間件,我可以圍繞wsgi應用程序進行轉換,並且可以監視傳入和傳出的http請求和標題字段。用於python wsgi應用程序的調試/監視器中間件
有點像firefox Live標題,但服務器端。
我正在尋找一個wsgi中間件,我可以圍繞wsgi應用程序進行轉換,並且可以監視傳入和傳出的http請求和標題字段。用於python wsgi應用程序的調試/監視器中間件
有點像firefox Live標題,但服務器端。
中間件
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()
見的werkzeug debugger阿明寫的,它是交互式調試有用。
只要你只需要標題,這應該不會太難寫。嘗試:
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
如果你想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)
的mod_wsgi的文檔中提供了調試這適用於任何WSGI託管機制,而不僅僅是mod_wsgi的各種技巧。參見:
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques
這包括一個例子WSGI中間件捕獲請求和響應。
我的WebCore項目有一些中間件,用於記錄傳入請求的整個WSGI環境(比如Beaker會話,頭文件等),出站響應頭以及性能信息到MongoDB數據庫。平均開銷約爲4ms。
該模塊已從核心軟件包中刪除,但尚未集成到其自身中。當前版本爲這個答案在Git的歷史可:
+1用於使用mongodb。性能不是真正的問題,因爲我只需要它來進行服務器端apis的開發/調試。 – 2010-03-05 11:06:02
OK,這就是傳入的一面,但我喜歡的傳出響應這樣做了。 – 2008-09-22 22:44:01