log: update GbpLogger for gbs.
authorwanchao-xu <wanchao.xu@samsung.com>
Fri, 26 Apr 2024 09:14:06 +0000 (17:14 +0800)
committerwanchao-xu <wanchao.xu@samsung.com>
Fri, 26 Apr 2024 09:14:06 +0000 (17:14 +0800)
Change-Id: I61b1a24ec2b9b0622132e11d3ce5a9f710a808d6
Signed-off-by: wanchao-xu <wanchao.xu@samsung.com>
gbp/log.py
gbp/rpm/lib_rpm.py

index ce02e480205bceaa494d9af93c0266ad50f173b0..688ccf32f05363b89cfa5cdc2ac5fe3b14a2e022 100644 (file)
 import os
 import sys
 import logging
-from logging import (DEBUG, INFO, WARNING, ERROR, CRITICAL, getLogger)
+from logging import DEBUG, INFO, WARNING, ERROR, CRITICAL
 import gbp.tristate
 
+# Initialize default logger
+LOGGER = logging.getLogger(__name__)
 
 COLORS = dict([('none', 0)] + list(zip(['black', 'red', 'green', 'yellow', 'blue',
                                         'magenta', 'cyan', 'white'], range(30, 38))))
@@ -96,27 +98,33 @@ class GbpLogger(logging.Logger):
 
     def __init__(self, name, color='auto', *args, **kwargs):
         super(GbpLogger, self).__init__(name, *args, **kwargs)
-        self._default_handlers = [GbpStreamHandler(sys.stdout, color),
-                                  GbpStreamHandler(sys.stderr, color)]
-        self._default_handlers[0].addFilter(GbpFilter([DEBUG, INFO]))
-        self._default_handlers[1].addFilter(GbpFilter([WARNING, ERROR,
-                                                       CRITICAL]))
-        for hdlr in self._default_handlers:
+        self.default_handlers = []
+
+    def init_default_handlers(self, color='auto'):
+        """Initialize and set default handlers to logger"""
+        self.default_handlers = [GbpStreamHandler(sys.stdout, color),
+                                 GbpStreamHandler(sys.stderr, color)]
+        self.default_handlers[0].addFilter(GbpFilter([DEBUG, INFO]))
+        self.default_handlers[1].addFilter(GbpFilter([WARNING, ERROR,
+                                                      CRITICAL]))
+        for hdlr in self.default_handlers:
             self.addHandler(hdlr)
+        # We don't want to propagate as we add our own handlers
+        self.propagate = False
 
     def set_color(self, color):
         """Set/unset colorized output of the default handlers"""
-        for hdlr in self._default_handlers:
+        for hdlr in self.default_handlers:
             hdlr.set_color(color)
 
     def set_color_scheme(self, color_scheme={}):
         """Set the color scheme of the default handlers"""
-        for hdlr in self._default_handlers:
+        for hdlr in self.default_handlers:
             hdlr.set_color_scheme(color_scheme)
 
     def set_format(self, fmt):
         """Set the format of the default handlers"""
-        for hdlr in self._default_handlers:
+        for hdlr in self.default_handlers:
             hdlr.set_format(fmt)
 
 
@@ -125,11 +133,19 @@ def err(msg):
     LOGGER.error(msg)
 
 
+def error(msg):
+    err(msg)
+
+
 def warn(msg):
     """Logs a message with level WARNING on the GBP logger"""
     LOGGER.warning(msg)
 
 
+def warning(msg):
+    warn(msg)
+
+
 def info(msg):
     """Logs a message with level INFO on the GBP logger"""
     LOGGER.info(msg)
@@ -162,8 +178,23 @@ def _parse_color_scheme(color_scheme=""):
     return scheme
 
 
+def getLogger(*args, **kwargs):
+    """Gbp-specific function"""
+    if not issubclass(logging.getLoggerClass(), GbpLogger):
+        logging.setLoggerClass(GbpLogger)
+    color = kwargs.pop('color') if 'color' in kwargs else 'auto'
+    logger = logging.getLogger(*args, **kwargs)
+    if hasattr(logger, 'default_handlers') and not logger.default_handlers:
+        logger.init_default_handlers(color)
+    return logger
+
+
 def setup(color, verbose, color_scheme=""):
     """Basic logger setup"""
+    # Initialize, if not done yet
+    if not isinstance(LOGGER, GbpLogger):
+        initialize()
+
     LOGGER.set_color(color)
     LOGGER.set_color_scheme(_parse_color_scheme(color_scheme))
     if verbose:
@@ -172,7 +203,7 @@ def setup(color, verbose, color_scheme=""):
         LOGGER.setLevel(INFO)
 
 
-# Initialize the module
-logging.setLoggerClass(GbpLogger)
-
-LOGGER = getLogger("gbp")
+def initialize():
+    """Initialize the logger module"""
+    global LOGGER
+    LOGGER = getLogger("gbp")
index 6cb71e28ca8ca56b620764696e99453f556c0ea3..d0418bc56025d2362f4fe30c117d972099428ad8 100644 (file)
@@ -25,6 +25,7 @@ try:
     # Try to load special RPM lib to be used for GBP (only)
     librpm = __import__(RpmPkgPolicy.python_rpmlib_module_name)
 except ImportError:
+    gbp.log.getLogger("gbp")
     gbp.log.warn("Failed to import '%s' as rpm python module, using host's "
                  "default rpm library instead" %
                  RpmPkgPolicy.python_rpmlib_module_name)