diff --git a/swift/account/server.py b/swift/account/server.py index 8a0c12744d..575014bd13 100644 --- a/swift/account/server.py +++ b/swift/account/server.py @@ -48,6 +48,7 @@ class AccountController(object): def __init__(self, conf, logger=None): self.logger = logger or get_logger(conf, log_route='account-server') + self.log_requests = config_true_value(conf.get('log_requests', 'true')) self.root = conf.get('devices', '/srv/node') self.mount_check = config_true_value(conf.get('mount_check', 'true')) replication_server = conf.get('replication_server', None) @@ -296,19 +297,20 @@ class AccountController(object): if res.headers.get('x-container-timestamp') is not None: additional_info += 'x-container-timestamp: %s' % \ res.headers['x-container-timestamp'] - log_message = '%s - - [%s] "%s %s" %s %s "%s" "%s" "%s" %s "%s"' % ( - req.remote_addr, - time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime()), - req.method, req.path, - res.status.split()[0], res.content_length or '-', - req.headers.get('x-trans-id', '-'), - req.referer or '-', req.user_agent or '-', - trans_time, - additional_info) - if req.method.upper() == 'REPLICATE': - self.logger.debug(log_message) - else: - self.logger.info(log_message) + if self.log_requests: + log_msg = '%s - - [%s] "%s %s" %s %s "%s" "%s" "%s" %s "%s"' % ( + req.remote_addr, + time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime()), + req.method, req.path, + res.status.split()[0], res.content_length or '-', + req.headers.get('x-trans-id', '-'), + req.referer or '-', req.user_agent or '-', + trans_time, + additional_info) + if req.method.upper() == 'REPLICATE': + self.logger.debug(log_msg) + else: + self.logger.info(log_msg) return res(env, start_response) diff --git a/swift/container/server.py b/swift/container/server.py index e6a3dc7b68..7f6e30ad97 100644 --- a/swift/container/server.py +++ b/swift/container/server.py @@ -55,6 +55,7 @@ class ContainerController(object): def __init__(self, conf, logger=None): self.logger = logger or get_logger(conf, log_route='container-server') + self.log_requests = config_true_value(conf.get('log_requests', 'true')) self.root = conf.get('devices', '/srv/node') self.mount_check = config_true_value(conf.get('mount_check', 'true')) self.node_timeout = int(conf.get('node_timeout', 3)) @@ -501,19 +502,20 @@ class ContainerController(object): {'method': req.method, 'path': req.path}) res = HTTPInternalServerError(body=traceback.format_exc()) trans_time = '%.4f' % (time.time() - start_time) - log_message = '%s - - [%s] "%s %s" %s %s "%s" "%s" "%s" %s' % ( - req.remote_addr, - time.strftime('%d/%b/%Y:%H:%M:%S +0000', - time.gmtime()), - req.method, req.path, - res.status.split()[0], res.content_length or '-', - req.headers.get('x-trans-id', '-'), - req.referer or '-', req.user_agent or '-', - trans_time) - if req.method.upper() == 'REPLICATE': - self.logger.debug(log_message) - else: - self.logger.info(log_message) + if self.log_requests: + log_message = '%s - - [%s] "%s %s" %s %s "%s" "%s" "%s" %s' % ( + req.remote_addr, + time.strftime('%d/%b/%Y:%H:%M:%S +0000', + time.gmtime()), + req.method, req.path, + res.status.split()[0], res.content_length or '-', + req.headers.get('x-trans-id', '-'), + req.referer or '-', req.user_agent or '-', + trans_time) + if req.method.upper() == 'REPLICATE': + self.logger.debug(log_message) + else: + self.logger.info(log_message) return res(env, start_response) diff --git a/test/unit/account/test_server.py b/test/unit/account/test_server.py index 40ec7efdb3..4ee882bccb 100644 --- a/test/unit/account/test_server.py +++ b/test/unit/account/test_server.py @@ -20,6 +20,7 @@ import unittest from tempfile import mkdtemp from shutil import rmtree from StringIO import StringIO +from test.unit import FakeLogger import simplejson import xml.dom.minidom @@ -1634,5 +1635,23 @@ class TestAccountController(unittest.TestCase): response = self.controller.__call__(env, start_response) self.assertEqual(response, answer) + def test_GET_log_requests_true(self): + self.controller.logger = FakeLogger() + self.controller.log_requests = True + + req = Request.blank('/sda1/p/a', environ={'REQUEST_METHOD': 'GET'}) + resp = req.get_response(self.controller) + self.assertEqual(resp.status_int, 404) + self.assertTrue(self.controller.logger.log_dict['info']) + + def test_GET_log_requests_false(self): + self.controller.logger = FakeLogger() + self.controller.log_requests = False + req = Request.blank('/sda1/p/a', environ={'REQUEST_METHOD': 'GET'}) + resp = req.get_response(self.controller) + self.assertEqual(resp.status_int, 404) + self.assertFalse(self.controller.logger.log_dict['info']) + + if __name__ == '__main__': unittest.main() diff --git a/test/unit/container/test_server.py b/test/unit/container/test_server.py index a65e5d83ad..ae6bc487b7 100644 --- a/test/unit/container/test_server.py +++ b/test/unit/container/test_server.py @@ -21,6 +21,7 @@ from contextlib import contextmanager from shutil import rmtree from StringIO import StringIO from tempfile import mkdtemp +from test.unit import FakeLogger from xml.dom import minidom from eventlet import spawn, Timeout, listen @@ -1851,6 +1852,23 @@ class TestContainerController(unittest.TestCase): response = self.controller.__call__(env, start_response) self.assertEqual(response, answer) + def test_GET_log_requests_true(self): + self.controller.logger = FakeLogger() + self.controller.log_requests = True + + req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'GET'}) + resp = req.get_response(self.controller) + self.assertEqual(resp.status_int, 404) + self.assertTrue(self.controller.logger.log_dict['info']) + + def test_GET_log_requests_false(self): + self.controller.logger = FakeLogger() + self.controller.log_requests = False + req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'GET'}) + resp = req.get_response(self.controller) + self.assertEqual(resp.status_int, 404) + self.assertFalse(self.controller.logger.log_dict['info']) + if __name__ == '__main__': unittest.main()