Skip to content

Commit c3bd4ca

Browse files
authored
[Logger] Fix multiple logs (#53)
1 parent 3930947 commit c3bd4ca

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

nuclio_sdk/logger.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,26 +58,25 @@ def __init__(self, level, name="nuclio_sdk"):
5858
self._logger = logging.getLogger(name)
5959
self._logger.setLevel(level)
6060
self._bound_variables = {}
61-
self._handlers = {}
6261

6362
def set_handler(self, handler_name, file, formatter):
6463

6564
# check if there's a handler by this name
66-
if handler_name in self._handlers:
67-
self._logger.removeHandler(self._handlers[handler_name])
65+
for handler in self._logger.handlers:
66+
if handler.name == handler_name:
67+
self._logger.removeHandler(handler)
68+
break
6869

6970
# create a stream handler from the file
7071
stream_handler = logging.StreamHandler(file)
72+
stream_handler.name = handler_name
7173

7274
# set the formatter
7375
stream_handler.setFormatter(formatter)
7476

7577
# add the handler to the logger
7678
self._logger.addHandler(stream_handler)
7779

78-
# save as the named output
79-
self._handlers[handler_name] = stream_handler
80-
8180
def debug(self, message, *args):
8281
self._update_bound_vars_and_log(logging.DEBUG, message, *args)
8382

nuclio_sdk/test/test_logger.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,21 @@ def __log__(self):
110110
'"with": {"some_instance": "Unable to serialize object: I am not a string"}',
111111
self._io.getvalue(),
112112
)
113+
114+
def test_redundant_logger_creation(self):
115+
116+
# create 3 loggers with the same name
117+
logger1 = nuclio_sdk.Logger(logging.DEBUG, "test-logger")
118+
logger1.set_handler("default", self._io, nuclio_sdk.logger.JSONFormatter())
119+
logger2 = nuclio_sdk.Logger(logging.DEBUG, "test-logger")
120+
logger2.set_handler("default", self._io, nuclio_sdk.logger.JSONFormatter())
121+
logger3 = nuclio_sdk.Logger(logging.DEBUG, "test-logger")
122+
logger3.set_handler("default", self._io, nuclio_sdk.logger.JSONFormatter())
123+
124+
# log from each logger and make sure only one log line is printed
125+
logger1.info("1")
126+
assert self._io.getvalue().count('"level": "info", "message": "1"') == 1
127+
logger2.info("2")
128+
assert self._io.getvalue().count('"level": "info", "message": "2"') == 1
129+
logger3.info("3")
130+
assert self._io.getvalue().count('"level": "info", "message": "3"') == 1

0 commit comments

Comments
 (0)