diff --git a/cumulus_logger.py b/cumulus_logger.py index 9e318bd..83bbbe5 100644 --- a/cumulus_logger.py +++ b/cumulus_logger.py @@ -88,15 +88,18 @@ def _get_exception_message(**kwargs): class CumulusLogger: def __init__(self, name=__name__, level=logging.DEBUG): """Creates a logger with a name and loggging level.""" - log_handler = logging.StreamHandler() - log_handler.setLevel(logging.DEBUG) - log_handler.setFormatter(logging.Formatter('%(message)s')) self.logger = logging.getLogger(name) - self.logger.addHandler(log_handler) self.logger.setLevel(level) + # Avoid duplicate message in AWS cloudwatch self.logger.propagate = False + if not self.logger.handlers: + log_handler = logging.StreamHandler() + log_handler.setLevel(logging.DEBUG) + log_handler.setFormatter(logging.Formatter('%(message)s')) + self.logger.addHandler(log_handler) + self.event = None self.context = None self._msg = {} diff --git a/tests/test_logger.py b/tests/test_logger.py index c155e53..b1a51bd 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -7,7 +7,7 @@ class TestLogger(unittest.TestCase): - def set_up_logger(self, event=None, context=None, logger=None): + def set_up_logger(self, event=None, context=None, logger=None, **kwargs): if event is None: event = create_event() @@ -15,7 +15,7 @@ def set_up_logger(self, event=None, context=None, logger=None): context = LambdaContextMock() if logger is None: - logger = CumulusLogger() + logger = CumulusLogger(**kwargs) logger.setMetadata(event, context) return logger @@ -143,3 +143,11 @@ def test_message_with_json_no_kwargs(self): logger = self.set_up_logger() msg = logger.createMessage('some message about JSON and the json: {"test": "simple"}') self.assertEqual(msg["message"], 'some message about JSON and the json: {"test": "simple"}') + + def test_multiple_instances_with_same_name_dont_have_multiple_handlers(self): + logger1 = self.set_up_logger(name='test') + self.assertEqual(1, len(logger1.logger.handlers)) + + logger2 = self.set_up_logger(name='test') + self.assertEqual(1, len(logger1.logger.handlers)) + self.assertEqual(1, len(logger2.logger.handlers))