Skip to content

Commit 8d90432

Browse files
authored
Refactor LocalLogger to remove the dependency on LogSender. (#139)
* Refactor LocalLogger to remove the dependency on LogSender. * call the LocalLogger.initialize() before EventType.ABOUT_TO_START_RUN.
1 parent 90ff9be commit 8d90432

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

nvflare/apis/utils/local_logger.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,44 @@
1515
import logging
1616
import threading
1717

18-
from nvflare.app_common.widgets.streaming import LogSender
19-
2018

2119
class LocalLogger:
20+
handlers = None
2221
loggers = {}
2322
lock = threading.Lock()
2423

24+
@staticmethod
25+
def initialize():
26+
""" Initialize the LocalLogger to keep all the handlers before the adding of LogSender handler.
27+
Returns:
28+
29+
"""
30+
if not LocalLogger.handlers:
31+
LocalLogger.handlers = []
32+
for handler in logging.root.handlers:
33+
LocalLogger.handlers.append(handler)
34+
2535
@staticmethod
2636
def get_logger(name=None) -> logging.Logger:
37+
""" Get a logger only do the local logging.
38+
Args:
39+
name: logger name
40+
41+
Returns: local_logger
42+
43+
"""
2744
with LocalLogger.lock:
45+
if not LocalLogger.handlers:
46+
LocalLogger.initialize()
47+
2848
logger = LocalLogger.loggers.get(name)
2949
if logger:
3050
return logger
3151

3252
logger = logging.getLogger(name)
3353
LocalLogger.loggers[name] = logger
34-
for handler in logging.root.handlers:
35-
if not isinstance(handler, LogSender):
36-
logger.addHandler(handler)
54+
for handler in LocalLogger.handlers:
55+
logger.addHandler(handler)
3756
logger.propagate = False
3857

3958
return logger

nvflare/private/fed/client/client_runner.py

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from nvflare.apis.fl_context import FLContext
2323
from nvflare.apis.shareable import Shareable, make_reply
2424
from nvflare.apis.signal import Signal
25+
from nvflare.apis.utils.local_logger import LocalLogger
2526
from nvflare.private.defs import SpecialTaskName
2627
from nvflare.private.defs import TaskConstant
2728
from nvflare.widgets.info_collector import GroupInfoCollector, InfoCollector
@@ -269,6 +270,9 @@ def _try_run(self):
269270

270271
def run(self, app_root, args):
271272
with self.engine.new_context() as fl_ctx:
273+
# initialize the LocalLogger to keep all the local handlers.
274+
LocalLogger.initialize()
275+
272276
self.fire_event(EventType.ABOUT_TO_START_RUN, fl_ctx)
273277
fl_ctx.set_prop(FLContextKey.APP_ROOT, app_root, sticky=True)
274278
fl_ctx.set_prop(FLContextKey.ARGS, args, sticky=True)

0 commit comments

Comments
 (0)