File tree 2 files changed +28
-5
lines changed
2 files changed +28
-5
lines changed Original file line number Diff line number Diff line change 15
15
import logging
16
16
import threading
17
17
18
- from nvflare .app_common .widgets .streaming import LogSender
19
-
20
18
21
19
class LocalLogger :
20
+ handlers = None
22
21
loggers = {}
23
22
lock = threading .Lock ()
24
23
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
+
25
35
@staticmethod
26
36
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
+ """
27
44
with LocalLogger .lock :
45
+ if not LocalLogger .handlers :
46
+ LocalLogger .initialize ()
47
+
28
48
logger = LocalLogger .loggers .get (name )
29
49
if logger :
30
50
return logger
31
51
32
52
logger = logging .getLogger (name )
33
53
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 )
37
56
logger .propagate = False
38
57
39
58
return logger
Original file line number Diff line number Diff line change 22
22
from nvflare .apis .fl_context import FLContext
23
23
from nvflare .apis .shareable import Shareable , make_reply
24
24
from nvflare .apis .signal import Signal
25
+ from nvflare .apis .utils .local_logger import LocalLogger
25
26
from nvflare .private .defs import SpecialTaskName
26
27
from nvflare .private .defs import TaskConstant
27
28
from nvflare .widgets .info_collector import GroupInfoCollector , InfoCollector
@@ -269,6 +270,9 @@ def _try_run(self):
269
270
270
271
def run (self , app_root , args ):
271
272
with self .engine .new_context () as fl_ctx :
273
+ # initialize the LocalLogger to keep all the local handlers.
274
+ LocalLogger .initialize ()
275
+
272
276
self .fire_event (EventType .ABOUT_TO_START_RUN , fl_ctx )
273
277
fl_ctx .set_prop (FLContextKey .APP_ROOT , app_root , sticky = True )
274
278
fl_ctx .set_prop (FLContextKey .ARGS , args , sticky = True )
You can’t perform that action at this time.
0 commit comments