diff options
| author | Rafael Zalamena <rzalamena@gmail.com> | 2017-07-07 09:29:41 -0300 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-11-27 20:22:11 -0500 |
| commit | 77ebccacf4fa0bd3b6503f31fc3785cac9f4efdb (patch) | |
| tree | 7c2e96f6f00325530a83308ba8d17577490ee240 | |
| parent | 36d1dc45eb6add18273b03af4c02dc89966859b0 (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.py | 40 |
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 |
