Add option to add specified handlers to logger
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Fri, 9 Aug 2019 10:57:06 +0000 (12:57 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Wed, 10 Nov 2021 09:28:29 +0000 (10:28 +0100)
src/log_helpers.py

index 3163971..39e1f41 100644 (file)
@@ -191,7 +191,7 @@ class I2nLogger:
 
     def __init__(self, name, level=INFO, fmt=DEFAULT_SHORT_LEVEL_FORMAT,
                  datefmt=DEFAULT_SHORT_LEVEL_DATE_FORMAT,
-                 streams=STDOUT, files=None):
+                 streams=STDOUT, files=None, handlers=None):
         """ creates a I2nLogger; forwards args to logging.getLogger
 
 
@@ -204,7 +204,13 @@ class I2nLogger:
                             :py:class:`ShortLevelFormatter` for more help
         :param streams: list/tuple of or a single stream to log to, default is
                         STDOUT (=sys.stdout)
+        :type streams: (:py:class:`io.IOBase`) or [:py:class:`io.IOBase`) or
+                       None
         :param files: list/tuple or single file name to log to
+        :type files: None or (str) or [str]
+        :param handlers: other handlers to customize and use with this logger
+        :type handlers: None or [:py:class:`logging.Handler`] or
+                        (:py:class:`logging.Handler`)
         :raise: ValueError if an I2nLogger with the same name exists already
         """
 
@@ -251,6 +257,17 @@ class I2nLogger:
             new_handler.setLevel(self._level)
             self._log.addHandler(new_handler)
 
+        if handlers is None:
+            handlers = []
+        elif not isinstance(handlers, (list, tuple)):
+            handlers = (handlers, )
+        for handler in handlers:
+            formatter = ShortLevelFormatter(fmt=fmt, datefmt=datefmt)
+            formatter.add_level(NOTICE, 'note')
+            handler.setFormatter(formatter)
+            handler.setLevel(self._level)
+            self._log.addHandler(handler)
+
         # remember that this logger is a I2nLogger
         _i2n_loggers[name] = self