From c75e783c39d72ed58e2d9bf405780eedabcd02ba Mon Sep 17 00:00:00 2001 From: flo-ri-an Date: Tue, 26 Jul 2022 13:25:41 +0200 Subject: [PATCH] Fixed multiple log handlers During hyperparameter optimisation of a hiclass classifier, HierarchicalClassifier._create_logger() adds a new StreamHandler to the logger every time it is instantiated. This means that on the nth iteration, every log line in the console is repeated n times. By checking if a hander is already set on the logger, we can skip adding another one when we call _create_logger() --- hiclass/HierarchicalClassifier.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/hiclass/HierarchicalClassifier.py b/hiclass/HierarchicalClassifier.py index 1075877c..c7576408 100644 --- a/hiclass/HierarchicalClassifier.py +++ b/hiclass/HierarchicalClassifier.py @@ -156,19 +156,20 @@ def _create_logger(self): self.logger_.setLevel(self.verbose) # Create console handler and set verbose level - ch = logging.StreamHandler() - ch.setLevel(self.verbose) + if not self.logger_.hasHandlers(): + ch = logging.StreamHandler() + ch.setLevel(self.verbose) - # Create formatter - formatter = logging.Formatter( - "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - ) + # Create formatter + formatter = logging.Formatter( + "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + ) - # Add formatter to ch - ch.setFormatter(formatter) + # Add formatter to ch + ch.setFormatter(formatter) - # Add ch to logger - self.logger_.addHandler(ch) + # Add ch to logger + self.logger_.addHandler(ch) def _disambiguate(self): self.separator_ = "::HiClass::Separator::"