Python wsgi 애플리케이션용 디버그/모니터 미들웨어
-
02-07-2019 - |
문제
나는 wsgi 애플리케이션을 둘러볼 수 있고 들어오고 나가는 http 요청과 헤더 필드를 모니터링할 수 있는 wsgi 미들웨어를 검색하고 있습니다.
Firefox 라이브 헤더와 비슷하지만 서버 측용입니다.
해결책
미들웨어
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 디버거 Armin은 대화형 디버깅에 유용하다고 썼습니다.
다른 팁
헤더만 필요한 한 직접 작성하는 것은 그리 어렵지 않습니다.시도해 보세요:
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 스타일 로그를 원하면 다음을 시도하십시오. 붙여넣기.translogger
그러나 매우 편리하거나 안정적인 위치는 아니지만(소스에 복사할 수도 있음) 더 완전한 것을 위해서는 wsgifilter.proxyapp.DebugHeaders
그리고 다음을 사용하여 하나를 작성합니다. 웹옵:
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 문서는 mod_wsgi뿐만 아니라 모든 WSGI 호스팅 메커니즘에 적용할 수 있는 다양한 디버깅 팁을 제공합니다.보다:
http://code.google.com/p/modwsgi/wiki/디버깅기술
여기에는 요청과 응답을 캡처하는 WSGI 미들웨어 예제가 포함되어 있습니다.
내 WebCore 프로젝트에는 들어오는 요청에 대한 전체 WSGI 환경(따라서 비커 세션, 헤더 등), 아웃바운드 응답에 대한 헤더 및 성능 정보를 MongoDB 데이터베이스에 기록하는 약간의 미들웨어가 있습니다.평균 오버헤드는 약 4ms입니다.
모듈이 핵심 패키지에서 제거되었지만 아직 자체 패키지에 통합되지 않았습니다.이 답변의 현재 버전은 Git 기록에서 확인할 수 있습니다.