[PATCH] Add a new log level 'lock' for _yum_lock

Brian C. Lane bcl at redhat.com
Fri Jun 13 22:18:12 UTC 2014


It is useful to log debug output from packaging without the yum_lock
logging. With this change yum_lock logging is only turned on with
inst.loglevel=lock

inst.debug, inst.updates, and inst.loglevel=debug now only turn on debug
logging for packaging.log with no yum_lock output.
---
 anaconda                           | 15 ++++++---------
 pyanaconda/anaconda_log.py         | 11 ++++++++---
 pyanaconda/constants.py            |  3 +++
 pyanaconda/packaging/yumpayload.py |  9 +++++----
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/anaconda b/anaconda
index 1be9eda..513965d 100755
--- a/anaconda
+++ b/anaconda
@@ -379,22 +379,19 @@ def setupEnvironment():
         del os.environ["LD_PRELOAD"]
 
 def setupLoggingFromOpts(options):
-    want_yum_lock_logs = False
-    if options.debug or options.updateSrc:
-        # debugging means debug logging
+    if (options.debug or options.updateSrc) and not options.loglevel:
+        # debugging means debug logging if an explicit level hasn't been st
         options.loglevel = "debug"
-        want_yum_lock_logs = options.debug
 
     if options.loglevel and options.loglevel in anaconda_log.logLevelMap:
-        level = anaconda_log.logLevelMap[opts.loglevel]
+        log.info("Switching logging level to %s", options.loglevel)
+        level = anaconda_log.logLevelMap[options.loglevel]
         anaconda_log.logger.tty_loglevel = level
         anaconda_log.setHandlersLevel(log, level)
         storage_log = logging.getLogger("storage")
         anaconda_log.setHandlersLevel(storage_log, level)
-
-        if options.loglevel != "debug" or want_yum_lock_logs:
-            packaging_log = logging.getLogger("packaging")
-            anaconda_log.setHandlersLevel(packaging_log, level)
+        packaging_log = logging.getLogger("packaging")
+        anaconda_log.setHandlersLevel(packaging_log, level)
 
     if options.syslog:
         anaconda_log.logger.updateRemote(options.syslog)
diff --git a/pyanaconda/anaconda_log.py b/pyanaconda/anaconda_log.py
index 8105835..1a48ea9 100644
--- a/pyanaconda/anaconda_log.py
+++ b/pyanaconda/anaconda_log.py
@@ -30,6 +30,7 @@ import types
 import warnings
 
 from pyanaconda.flags import flags
+from pyanaconda.constants import LOGLVL_LOCK
 
 DEFAULT_TTY_LEVEL = logging.INFO
 ENTRY_FORMAT = "%(asctime)s,%(msecs)03d %(levelname)s %(name)s: %(message)s"
@@ -49,8 +50,11 @@ ANACONDA_SYSLOG_FACILITY = SysLogHandler.LOG_LOCAL1
 from threading import Lock
 program_log_lock = Lock()
 
-logLevelMap = {"debug": logging.DEBUG, "info": logging.INFO,
-               "warning": logging.WARNING, "error": logging.ERROR,
+logLevelMap = {"lock": LOGLVL_LOCK,
+               "debug": logging.DEBUG,
+               "info": logging.INFO,
+               "warning": logging.WARNING,
+               "error": logging.ERROR,
                "critical": logging.CRITICAL}
 
 # sets autoSetLevel for the given handler
@@ -87,6 +91,7 @@ class AnacondaLog:
         logging.addLevelName(logging.WARNING, "WARN")
         logging.addLevelName(logging.ERROR, "ERR")
         logging.addLevelName(logging.CRITICAL, "CRIT")
+        logging.addLevelName(LOGLVL_LOCK, "LOCK")
 
         # Create the base of the logger hierarchy.
         self.anaconda_logger = logging.getLogger("anaconda")
@@ -123,7 +128,7 @@ class AnacondaLog:
 
         # Create the packaging logger.
         packaging_logger = logging.getLogger("packaging")
-        packaging_logger.setLevel(logging.DEBUG)
+        packaging_logger.setLevel(LOGLVL_LOCK)
         self.addFileHandler(PACKAGING_LOG_FILE, packaging_logger,
                             minLevel=logging.INFO,
                             autoLevel=True)
diff --git a/pyanaconda/constants.py b/pyanaconda/constants.py
index db786b5..4f9b64a 100644
--- a/pyanaconda/constants.py
+++ b/pyanaconda/constants.py
@@ -166,3 +166,6 @@ TAR_SUFFIX = (".tar", ".tbz", ".tgz", ".txz", ".tar.bz2", "tar.gz", "tar.xz")
 CMDLINE_APPEND = ["modprobe.blacklist"]
 
 DEFAULT_AUTOPART_TYPE = AUTOPART_TYPE_LVM
+
+import logging
+LOGLVL_LOCK = logging.DEBUG-1
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 760fa02..c05d36a 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -63,7 +63,8 @@ except ImportError:
     log.error("import of yum failed")
     yum = None
 
-from pyanaconda.constants import BASE_REPO_NAME, DRACUT_ISODIR, INSTALL_TREE, ISO_DIR, MOUNT_DIR
+from pyanaconda.constants import BASE_REPO_NAME, DRACUT_ISODIR, INSTALL_TREE, ISO_DIR, MOUNT_DIR, \
+                                 LOGLVL_LOCK
 from pyanaconda.flags import flags
 
 from pyanaconda import iutil
@@ -101,16 +102,16 @@ class YumLock(object):
         frame = inspect.stack()[2]
         threadName = threading.currentThread().name
 
-        log.debug("about to acquire _yum_lock for %s at %s:%s (%s)", threadName, frame[1], frame[2], frame[3])
+        log.log(LOGLVL_LOCK, "about to acquire _yum_lock for %s at %s:%s (%s)", threadName, frame[1], frame[2], frame[3])
         _private_yum_lock.acquire()
-        log.debug("have _yum_lock for %s", threadName)
+        log.log(LOGLVL_LOCK, "have _yum_lock for %s", threadName)
         return _private_yum_lock
 
     def __exit__(self, exc_type, exc_val, exc_tb):
         _private_yum_lock.release()
 
         if not isFinal:
-            log.debug("gave up _yum_lock for %s", threading.currentThread().name)
+            log.log(LOGLVL_LOCK, "gave up _yum_lock for %s", threading.currentThread().name)
 
 def refresh_base_repo(cond_fn=None):
     """
-- 
1.9.3



More information about the anaconda-patches mailing list