我正在搜索一个wsgi中间件,我可以围绕一个wsgi应用程序进行扭曲,这可以让我监控传入和传出的http请求和头字段。
像firefox live header这样的东西,但是对于服务器端。
答案 0 :(得分:2)
只要您只需要标题,就不要太难写自己。试试这个:
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
答案 1 :(得分:2)
中间件
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 Armin写道,它对交互式调试很有用。
答案 2 :(得分:2)
如果您想要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)
答案 3 :(得分:1)
mod_wsgi文档提供了有关调试的各种提示,这些提示适用于任何WSGI托管机制,而不仅仅是mod_wsgi。参见:
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques
这包括一个捕获请求和响应的示例WSGI中间件。
答案 4 :(得分:1)
我的WebCore项目有一些中间件,可以记录传入请求的整个WSGI环境(因此Beaker会话,标题等),出站响应的标头以及MongoDB数据库的性能信息。平均开销约为4毫秒。
该模块已从核心软件包中删除,但尚未集成到自己的软件包中。 Git历史记录中提供了此答案的当前版本: