diff --git a/gunicorn/glogging.py b/gunicorn/glogging.py index ad2f57c4..fea26016 100644 --- a/gunicorn/glogging.py +++ b/gunicorn/glogging.py @@ -175,7 +175,12 @@ class Logger(object): } # add request headers - atoms.update(dict([("{%s}i" % k.lower(),v) for k, v in req.headers])) + if hasattr(req, 'headers'): + req_headers = req.headers + else: + req_headers = req + + atoms.update(dict([("{%s}i" % k.lower(),v) for k, v in req_headers])) # add response headers atoms.update(dict([("{%s}o" % k.lower(),v) for k, v in resp.headers])) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 4ad6ef32..c8a42eb0 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -96,13 +96,29 @@ class GeventWorker(AsyncWorker): gevent.core.dns_init() super(GeventWorker, self).init_process() + +class GeventResponse(object): + + status = None + headers = None + response_length = None + + + def __init__(self, status, headers, clength): + self.status = status + self.headers = headers + self.response_length = clength + class PyWSGIHandler(pywsgi.WSGIHandler): def log_request(self): start = datetime.fromtimestamp(self.time_start) finish = datetime.fromtimestamp(self.time_finish) response_time = finish - start - self.server.log.access(self, self.environ, response_time) + resp = GeventResponse(self.status, self.response_headers, + self.response_length) + req_headers = [h.split(":", 1) for h in self.headers.headers] + self.server.log.access(resp, req_headers, self.environ, response_time) def get_environ(self): env = super(PyWSGIHandler, self).get_environ()