diff --git a/swift/common/middleware/staticweb.py b/swift/common/middleware/staticweb.py index 547e82368a..119e968963 100644 --- a/swift/common/middleware/staticweb.py +++ b/swift/common/middleware/staticweb.py @@ -471,8 +471,12 @@ class _StaticWebContext(WSGIContext): client = env['HTTP_X_FORWARDED_FOR'].split(',')[0].strip() logged_headers = None if self.log_headers: - logged_headers = '\n'.join('%s: %s' % (k, v) - for k, v in req.headers.items()) + headers = [] + for k, v in env.iteritems(): + if k.startswith('HTTP_'): + k = k[len('HTTP_'):].replace('_', '-').title() + headers.append((k, v)) + logged_headers = '\n'.join('%s: %s' % (k, v) for k, v in headers) self.access_logger.info(' '.join(quote(str(x)) for x in ( client or '-', env.get('REMOTE_ADDR', '-'), diff --git a/test/unit/common/middleware/test_staticweb.py b/test/unit/common/middleware/test_staticweb.py index 8602e8d664..135e611eb0 100644 --- a/test/unit/common/middleware/test_staticweb.py +++ b/test/unit/common/middleware/test_staticweb.py @@ -23,6 +23,7 @@ from contextlib import contextmanager from webob import Request, Response from swift.common.middleware import staticweb +from test.unit import FakeLogger class FakeMemcache(object): @@ -624,5 +625,33 @@ class TestStaticWeb(unittest.TestCase): self.assertEquals(resp.body, '1') self.assertEquals(self.app.calls, 1) + def test_log_headers(self): + # Using a listing request since we know that calls StaticWeb's logging + # routines + self.test_staticweb.access_logger = FakeLogger() + self.test_staticweb.log_headers = True + req = Request.blank('/v1/a/c3/subdir/', + headers={'test-header': 'test-value'}) + resp = req.get_response(self.test_staticweb) + self.assertEquals(resp.status_int, 200) + self.assert_('Listing of /v1/a/c3/subdir/' in resp.body) + infos = self.test_staticweb.access_logger.log_dict['info'] + self.assertEquals(len(infos), 1) + info = infos[0][0][0] + self.assertTrue('Test-Header%3A%20test-value' in info, repr(info)) + + self.test_staticweb.access_logger = FakeLogger() + self.test_staticweb.log_headers = False + req = Request.blank('/v1/a/c3/subdir/', + headers={'test-header': 'test-value'}) + resp = req.get_response(self.test_staticweb) + self.assertEquals(resp.status_int, 200) + self.assert_('Listing of /v1/a/c3/subdir/' in resp.body) + infos = self.test_staticweb.access_logger.log_dict['info'] + self.assertEquals(len(infos), 1) + info = infos[0][0][0] + self.assertTrue('Test-Header%3A%20test-value' not in info, repr(info)) + + if __name__ == '__main__': unittest.main()