Skip to content

Commit d7a62ad

Browse files
committed
Fix adding duplicate logging handlers
1 parent 07633e0 commit d7a62ad

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

bidscoin/bcoin.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)