summaryrefslogtreecommitdiff
path: root/tests/topotests/lib/topolog.py
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 /tests/topotests/lib/topolog.py
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.
Diffstat (limited to 'tests/topotests/lib/topolog.py')
-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