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