Skip to content

Commit

Permalink
CumulusLogger: only create new handler if one is not present
Browse files Browse the repository at this point in the history
This fixes the test added in the previous commit

Before this change, multiple calls to `CumulusLogger(name)` would construct a
`CumulusLogger` instance with the same underlying `Logger` instance, but each
construction would also create and attach a new handler, resulting in duplicate
messages, e.g.:

```
> python
>>> from cumulus_logger import CumulusLogger
>>> logger = CumulusLogger('test')
>>> logger.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:18:09.315309", "level": "info"}
>>>
>>> logger2 = CumulusLogger('test')
>>> logger2.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:18:16.845070", "level": "info"}
{"message": "hello there", "timestamp": "2021-12-21T16:18:16.845070", "level": "info"}
>>>
>>> logger.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:18:18.165564", "level": "info"}
{"message": "hello there", "timestamp": "2021-12-21T16:18:18.165564", "level": "info"}
```

See also the screenshots on
ghrcdaac/dmrpp-file-generator-docker#25

With this change, a new handler is only constructed if the underlying `Logger`
does not already have any handlers, preventing messages from being handled more
than once:

```
> python
>>> from cumulus_logger import CumulusLogger
>>> logger  = CumulusLogger('test')
>>> logger.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:33:56.735453", "level": "info"}
>>>
>>> logger2 = CumulusLogger('test')
>>> logger2.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:34:03.887972", "level": "info"}
>>>
>>> logger.info('hello there')
{"message": "hello there", "timestamp": "2021-12-21T16:34:07.808415", "level": "info"}
```
  • Loading branch information
michaeljb committed Dec 21, 2021
1 parent 4f5a4f7 commit a58c63b
Showing 1 changed file with 7 additions and 4 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

0 comments on commit a58c63b

Please sign in to comment.