From b24a7dd4cbac8bd019af4e73def1712ba654ad63 Mon Sep 17 00:00:00 2001 From: Christian Schwede Date: Mon, 17 Feb 2014 10:31:20 +0000 Subject: [PATCH] Allow log disable in account/container server Logging can be disabled in the object server, but not in the account and container server though both sample configs already include that setting. This patch allows to disable logging for account and container server as well. Functionality is ensured by some additional tests. Closes-Bug: 1280954 Change-Id: Ia4e87911863089c3bea093d9f181ff29e9e963eb --- swift/account/server.py | 28 +++++++++++++++------------- swift/container/server.py | 28 +++++++++++++++------------- test/unit/account/test_server.py | 19 +++++++++++++++++++ test/unit/container/test_server.py | 18 ++++++++++++++++++ 4 files changed, 67 insertions(+), 26 deletions(-) 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()