@@ -135,18 +135,23 @@ def success(self, message, *args, **kws):
135135 logger .setLevel ('BCDEBUG' if DEBUG else 'VERBOSE' )
136136
137137 # Add the Rich console handler and bring some color to those boring logs! :-)
138- console = Console (theme = Theme ({'logging.level.verbose' : 'grey50' , 'logging.level.success' : 'green bold' , 'logging.level.bcdebug' : 'bright_yellow' }))
139- keywords = RichHandler .KEYWORDS + ['IntendedFor' , 'B0FieldIdentifier' , 'B0FieldSource' , 'TaskName' , '->' , '-->' ]
140- level = 'BCDEBUG' if DEBUG else 'VERBOSE' if not logfile .name else 'INFO'
141- consolehandler = RichHandler (console = console , show_time = False , show_level = True , show_path = DEBUG , rich_tracebacks = True , markup = True , keywords = keywords , level = level )
142- consolehandler .set_name ('consolehandler' )
143- logger .addHandler (consolehandler )
138+ if 'consolehandler' not in (handlers := [handler .name for handler in logger .handlers ]):
139+ console = Console (theme = Theme ({'logging.level.verbose' : 'grey50' , 'logging.level.success' : 'green bold' , 'logging.level.bcdebug' : 'bright_yellow' }))
140+ keywords = RichHandler .KEYWORDS + ['IntendedFor' , 'B0FieldIdentifier' , 'B0FieldSource' , 'TaskName' , '->' , '-->' ]
141+ level = 'BCDEBUG' if DEBUG else 'VERBOSE' if not logfile .name else 'INFO'
142+ consolehandler = RichHandler (console = console , show_time = False , show_level = True , show_path = DEBUG , rich_tracebacks = True , markup = True , keywords = keywords , level = level )
143+ consolehandler .set_name ('consolehandler' )
144+ logger .addHandler (consolehandler )
145+ else :
146+ console = next ((handler .console for handler in logger .handlers if handler .get_name () == 'consolehandler' ), None )
144147
145148 # Add the optional file handlers
146149 if logfile .name :
147150
148151 logfile .parent .mkdir (parents = True , exist_ok = True )
149152 formatter = logging .Formatter (fmt = f"%(asctime)s - %({ 'level' if DEBUG else '' } name)s | %(message)s" , datefmt = '%Y-%m-%d %H:%M:%S' )
153+ for handler in [handler for handler in logger .handlers if handler .get_name () in ('loghandler' , 'errorhandler' )]:
154+ logger .removeHandler (handler )
150155
151156 # Add the verbose file handler
152157 loghandler = logging .FileHandler (logfile )
@@ -179,7 +184,7 @@ def reporterrors() -> str:
179184 # Find the root filehandlers and report the errors and warnings
180185 errors = ''
181186 for handler in logging .getLogger ().handlers :
182- if handler .name == 'errorhandler' :
187+ if handler .get_name () == 'errorhandler' :
183188
184189 errorfile = Path (handler .baseFilename )
185190 if errorfile .is_file ():
@@ -192,7 +197,7 @@ def reporterrors() -> str:
192197 LOGGER .success (f'No BIDScoin errors or warnings were reported' )
193198 LOGGER .info ('' )
194199
195- elif handler .name == 'loghandler' :
200+ elif handler .get_name () == 'loghandler' :
196201 logfile = Path (handler .baseFilename )
197202
198203 # Final message
0 commit comments