summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@gmail.com>2017-07-07 09:29:41 -0300
committerDonald Sharp <sharpd@cumulusnetworks.com>2018-11-27 20:22:11 -0500
commit77ebccacf4fa0bd3b6503f31fc3785cac9f4efdb (patch)
tree7c2e96f6f00325530a83308ba8d17577490ee240
parent36d1dc45eb6add18273b03af4c02dc89966859b0 (diff)
topolog: support adding loggers during runtime
Allow topotest subsystems to create their own loggers. This will help increase log organization and allow different settings to fit the subsystems needs.
-rw-r--r--tests/topotests/lib/topolog.py40
1 files changed, 35 insertions, 5 deletions
diff --git a/tests/topotests/lib/topolog.py b/tests/topotests/lib/topolog.py
index 0a192ce285..3a383c8e73 100644
--- a/tests/topotests/lib/topolog.py
+++ b/tests/topotests/lib/topolog.py
@@ -26,6 +26,7 @@ Logging utilities for topology tests.
This file defines our logging abstraction.
"""
+import sys
import logging
# Helper dictionary to convert Topogen logging levels to Python's logging.
@@ -51,16 +52,45 @@ class Logger(object):
"""
def __init__(self):
- self.logger = logging.Logger('topolog', level=logging.INFO)
- self.handler = logging.StreamHandler()
- self.handler.setFormatter(
+ # Create default global logger
+ self.log_level = logging.INFO
+ self.logger = logging.Logger('topolog', level=self.log_level)
+ handler = logging.StreamHandler()
+ handler.setFormatter(
logging.Formatter(fmt='%(asctime)s %(levelname)s: %(message)s')
)
- self.logger.addHandler(self.handler)
+ self.logger.addHandler(handler)
+
+ # Handle more loggers
+ self.loggers = {'topolog': self.logger}
def set_log_level(self, level):
"Set the logging level"
- self.logger.setLevel(DEBUG_TOPO2LOGGING.get(level))
+ self.log_level = DEBUG_TOPO2LOGGING.get(level)
+ self.logger.setLevel(self.log_level)
+
+ def get_logger(self, name='topolog', log_level=None, target=sys.stdout):
+ """
+ Get a new logger entry. Allows creating different loggers for formating,
+ filtering or handling (file, stream or stdout/stderr).
+ """
+ if log_level is None:
+ log_level = self.log_level
+ if self.loggers.has_key(name):
+ return self.loggers[name]
+
+ nlogger = logging.Logger(name, level=log_level)
+ if isinstance(target, str):
+ handler = logging.FileHandler(filename=target)
+ else:
+ handler = logging.StreamHandler(stream=target)
+
+ handler.setFormatter(
+ logging.Formatter(fmt='%(asctime)s %(levelname)s: %(message)s')
+ )
+ nlogger.addHandler(handler)
+ self.loggers[name] = nlogger
+ return nlogger
#
# Global variables