Skip to content

Commit

Permalink
Merge pull request #43 from nsidc/fix-multiple-handlers
Browse files Browse the repository at this point in the history
Fix multiple handlers causing duplicate messages
  • Loading branch information
markdboyd committed Feb 15, 2022
2 parents aeca584 + 264682e commit 643eb8a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
11 changes: 7 additions & 4 deletions cumulus_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {}
Expand Down
12 changes: 10 additions & 2 deletions tests/test_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@


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()

if context is None:
context = LambdaContextMock()

if logger is None:
logger = CumulusLogger()
logger = CumulusLogger(**kwargs)
logger.setMetadata(event, context)

return logger
Expand Down Expand Up @@ -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))

0 comments on commit 643eb8a

Please sign in to comment.