[yum-cvs] yum/yum logginglevels.py, NONE, 1.1 __init__.py, 1.212, 1.213 depsolve.py, 1.82, 1.83 plugins.py, 1.29, 1.30 sqlitecache.py, 1.11, 1.12

Jeremy Katz katzj at linux.duke.edu
Fri Jun 23 14:26:19 UTC 2006


Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv19994/yum

Modified Files:
	__init__.py depsolve.py plugins.py sqlitecache.py 
Added Files:
	logginglevels.py 
Log Message:
>From James Bowes <jbowes at redhat.com> and modified by me to bring it up
to current HEAD

Move yum from using a custom logging implementation to python's logging 
module.  Full details about the changes at
https://lists.dulug.duke.edu/pipermail/yum-devel/2006-May/002235.html


--- NEW FILE logginglevels.py ---
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


"""
Custom logging levels for finer-grained logging using python's standard
logging module.
"""

import os
import sys
import logging

INFO_1 = 19
INFO_2 = 18

DEBUG_1 = 9
DEBUG_2 = 8
DEBUG_3 = 7
DEBUG_4 = 6

logging.addLevelName(INFO_1, "INFO_1")
logging.addLevelName(INFO_2, "INFO_2")

logging.addLevelName(DEBUG_1, "DEBUG_1")
logging.addLevelName(DEBUG_2, "DEBUG_2")
logging.addLevelName(DEBUG_3, "DEBUG_3")
logging.addLevelName(DEBUG_4, "DEBUG_4")


# High level to effectively turn off logging.
# For compatability with the old logging system.
__NO_LOGGING = 100

def logLevelFromErrorLevel(error_level):
    """ Convert an old-style error logging level to the new style. """
    error_table = { -1 : __NO_LOGGING, 0 : logging.CRITICAL, 1 : logging.ERROR,
        2 : logging.WARNING}
    
    return __convertLevel(error_level, error_table)

def logLevelFromDebugLevel(debug_level):
    """ Convert an old-style debug logging level to the new style. """
    debug_table = {-1 : __NO_LOGGING, 0 : logging.INFO, 1 : INFO_1, 2 : INFO_2,
        3 : logging.DEBUG, 4 : DEBUG_1, 5 : DEBUG_2, 6 : DEBUG_3, 7 : DEBUG_4}

    return __convertLevel(debug_level, debug_table)

def __convertLevel(level, table):
    """ Convert yum logging levels using a lookup table. """
    # Look up level in the table.
    try:
        new_level = table[level]
    except KeyError:
        keys = table.keys()
        # We didn't find the level in the table, check if it's smaller
        # than the smallest level
        if level < keys[0]:
            new_level = table[keys[0]]
        # Nope. So it must be larger.
        else:
            new_level =  table[keys[-2]]

    return new_level

def setDebugLevel(level):
    converted_level = logLevelFromDebugLevel(level)
    logging.getLogger("yum.verbose").setLevel(converted_level)
    
def setErrorLevel(level):
    converted_level = logLevelFromErrorLevel(level)
    logging.getLogger("yum").setLevel(converted_level)

def doLoggingSetup(uid, logfile, errorlevel=None, debuglevel=None):
    """
    Configure the python logger.
    
    errorlevel is optional. If provided, it will override the logging level
    provided in the logging config file for error messages.
    debuglevel is optional. If provided, it will override the logging level
    provided in the logging config file for debug messages.
    """
    logging.basicConfig()

    plainformatter = logging.Formatter("%(message)s")
        
    console_stdout = logging.StreamHandler(sys.stdout)
    console_stdout.setFormatter(plainformatter)
    verbose = logging.getLogger("yum.verbose")
    verbose.propagate = False
    verbose.addHandler(console_stdout)
        
    console_stderr = logging.StreamHandler(sys.stderr)
    console_stderr.setFormatter(plainformatter)
    logger = logging.getLogger("yum")
    logger.propagate = False
    logger.addHandler(console_stderr)
    
    syslog = logging.handlers.SysLogHandler(('localhost',
        logging.handlers.SYSLOG_UDP_PORT),
        logging.handlers.SysLogHandler.LOG_USER)
    syslog.setFormatter(plainformatter)
    filelogger = logging.getLogger("yum.filelogging")
    filelogger.propagate = False
    filelogger.addHandler(syslog)

    # TODO: When python's logging config parser doesn't blow up
    # when the user is non-root, put this in the config file.
    # syslog-style log
    if uid == 0:
        logpath = os.path.dirname(logfile)
        try:
            filehandler = logging.FileHandler(logfile)
            formatter = logging.Formatter("%(asctime)s %(message)s",
                "%b %d %H:%M:%S")
            filehandler.setFormatter(formatter)
            filelogger.addHandler(filehandler)
        except Exception, e:
            logging.getLogger("yum").critical(_('Cannot open logfile %s'), logfile)

    if debuglevel is not None:
        setDebugLevel(debuglevel)
    if errorlevel is not None:  
        setErrorLevel(errorlevel)


Index: __init__.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/__init__.py,v
retrieving revision 1.212
retrieving revision 1.213
diff -u -r1.212 -r1.213
--- __init__.py	21 Jun 2006 17:07:44 -0000	1.212
+++ __init__.py	23 Jun 2006 14:26:17 -0000	1.213
@@ -26,6 +26,8 @@
 import time
 import sre_constants
 import glob
+import logging
+import logging.config
 from ConfigParser import ParsingError
 
 import Errors
@@ -42,6 +44,7 @@
 from urlgrabber.grabber import URLGrabError
 import depsolve
 import plugins
+import logginglevels
 
 
 from packages import parsePackages, YumAvailablePackage, YumLocalPackage, YumInstalledPackage
@@ -59,9 +62,9 @@
     def __init__(self):
         depsolve.Depsolve.__init__(self)
         self.localdbimported = 0
+        self.logger = logging.getLogger("yum.YumBase")
+        self.verbose_logger = logging.getLogger("yum.verbose.YumBase")
         self.repos = repos.RepoStorage() # class of repositories
-        # TODO: PAV Fix this
-        # self.log(1, "Using %s storage" % self.repos.storage.Name())
 
         # Start with plugins disabled
         self.disablePlugins()
@@ -74,17 +77,6 @@
             return transactioninfo.ConditionalTransactionData()
         return transactioninfo.TransactionData()
 
-    def log(self, value, msg):
-        """dummy log stub"""
-        print msg
-
-    def errorlog(self, value, msg):
-        """dummy errorlog stub"""
-        print >> sys.stderr, msg
-
-    def filelog(self, value, msg):
-        print msg
-   
     def doGenericSetup(self, cache=0):
         """do a default setup for all the normal/necessary yum components,
            really just a shorthand for testing"""
@@ -160,7 +152,7 @@
             try:
                 thisrepo = config.readRepoConfig(self.conf.cfg, section, self.conf)
             except (Errors.RepoError, Errors.ConfigError), e:
-                self.errorlog(2, e)
+                self.logger.warning(e)
             else:
                 reposlist.append(thisrepo)
 
@@ -185,7 +177,7 @@
             try:
                 thisrepo = config.readRepoConfig(parser, section, self.conf)
             except (Errors.RepoError, Errors.ConfigError), e:
-                self.errorlog(2, e)
+                self.logger.warning(e)
             else:
                 reposlist.append(thisrepo)
 
@@ -194,7 +186,7 @@
             try:
                 self.repos.add(thisrepo)
             except Errors.RepoError, e: 
-                self.errorlog(2, e)
+                self.logger.warning(e)
                 continue
 
     def disablePlugins(self):
@@ -248,7 +240,7 @@
         """sets up a holder object for important information from the rpmdb"""
         
         if not self.localdbimported:
-            self.log(3, 'Reading Local RPMDB')
+            self.verbose_logger.debug('Reading Local RPMDB')
             self.rpmdb.addDB(self.read_ts)
             self.localdbimported = 1
 
@@ -281,7 +273,7 @@
             repos = self.repos.findRepos(thisrepo)
 
         if len(repos) < 1:
-            self.errorlog(0, 'No Repositories Available to Set Up')
+            self.logger.critical('No Repositories Available to Set Up')
 
         num = 1
         for repo in repos:
@@ -299,7 +291,8 @@
            takes optional archlist for archs to include"""
            
         if hasattr(self, 'pkgSack') and thisrepo is None:
-            self.log(7, 'skipping reposetup, pkgsack exists')
+            self.verbose_logger.log(logginglevels.DEBUG_4,
+                'skipping reposetup, pkgsack exists')
             return
             
         if thisrepo is None:
@@ -307,7 +300,7 @@
         else:
             repos = self.repos.findRepos(thisrepo)
             
-        self.log(3, 'Setting up Package Sacks')
+        self.verbose_logger.debug('Setting up Package Sacks')
         if not archlist:
             archlist = rpmUtils.arch.getArchList()
 
@@ -334,7 +327,7 @@
         if hasattr(self, 'up'):
             return
             
-        self.log(3, 'Building updates object')
+        self.verbose_logger.debug('Building updates object')
         #FIXME - add checks for the other pkglists to see if we should
         # raise an error
         if not hasattr(self, 'pkgSack'):
@@ -364,7 +357,7 @@
            finds the repos with groups, gets their comps data and merge it
            into the group object"""
         
-        self.log(3, 'Getting group metadata')
+        self.verbose_logger.debug('Getting group metadata')
         reposWithGroups = []
         for repo in self.repos.listGroupsEnabled():
             if repo.groups_added: # already added the groups from this repo
@@ -389,12 +382,13 @@
             if repo.groups_added: # already added the groups from this repo
                 continue
                 
-            self.log(4, 'Adding group file from repository: %s' % repo)
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'Adding group file from repository: %s', repo)
             groupfile = repo.getGroups()
             try:
                 self.comps.add(groupfile)
             except Errors.GroupsError, e:
-                self.errorlog(0, 'Failed to add groups file for repository: %s' % repo)
+                self.logger.critical('Failed to add groups file for repository: %s' % repo)
             else:
                 repo.groups_added = True
 
@@ -404,8 +398,7 @@
         self.doRpmDBSetup()
         pkglist = self.rpmdb.getPkgList()
         self.comps.compile(pkglist)
-        
-
+            
     def doSackFilelistPopulate(self):
         """convenience function to populate the repos with the filelist metadata
            it also is simply to only emit a log if anything actually gets populated"""
@@ -419,7 +412,7 @@
         
         if necessary:
             msg = 'Importing additional filelist information'
-            self.log(2, msg)
+            self.verbose_logger.log(logginglevels.INFO_2, msg)
             self.repos.populateSack(with='filelists')
            
     def buildTransaction(self):
@@ -468,18 +461,19 @@
             return
         
         if not repo:
-            self.log(2, 'Excluding Packages in global exclude list')
+            self.verbose_logger.log(logginglevels.INFO_2, 'Excluding Packages in global exclude list')
         else:
-            self.log(2, 'Excluding Packages from %s' % repo.name)
+            self.verbose_logger.log(logginglevels.INFO_2, 'Excluding Packages from %s',
+                repo.name)
             
         exactmatch, matched, unmatched = \
            parsePackages(self.pkgSack.returnPackages(repoid), excludelist, casematch=1)
         
         for po in exactmatch + matched:
-            self.log(3, 'Excluding %s' % po)
+            self.verbose_logger.debug('Excluding %s', po)
             self.pkgSack.delPackage(po)
       
-        self.log(2, 'Finished')
+        self.verbose_logger.log(logginglevels.INFO_2, 'Finished')
 
     def includePackages(self, repo):
         """removes packages from packageSacks based on list of packages, to include.
@@ -494,21 +488,22 @@
         exactmatch, matched, unmatched = \
            parsePackages(pkglist, includelist, casematch=1)
         
-        self.log(2, 'Reducing %s to included packages only' % repo.name)
+        self.verbose_logger.log(logginglevels.INFO_2,
+            'Reducing %s to included packages only', repo.name)
         rmlist = []
         
         for po in pkglist:
             if po in exactmatch + matched:
-                self.log(3, 'Keeping included package %s' % po)
+                self.verbose_logger.debug('Keeping included package %s', po)
                 continue
             else:
                 rmlist.append(po)
         
         for po in rmlist:
-            self.log(3, 'Removing unmatched package %s' % po)
+            self.verbose_logger.debug('Removing unmatched package %s', po)
             self.pkgSack.delPackage(po)
             
-        self.log(2, 'Finished')
+        self.verbose_logger.log(logginglevels.INFO_2, 'Finished')
         
     def doLock(self, lockfile):
         """perform the yum locking, raise yum-based exceptions, not OSErrors"""
@@ -837,10 +832,11 @@
             try:
                 os.unlink(hdr)
             except OSError, e:
-                self.errorlog(0, 'Cannot remove header %s' % hdr)
+                self.logger.critical('Cannot remove header %s', hdr)
                 continue
             else:
-                self.log(7, 'Header %s removed' % hdr)
+                self.verbose_logger.log(logginglevels.DEBUG_4,
+                    'Header %s removed', hdr)
                 removed+=1
         msg = '%d headers removed' % removed
         return 0, [msg]
@@ -859,10 +855,11 @@
             try:
                 os.unlink(pkg)
             except OSError, e:
-                self.errorlog(0, 'Cannot remove package %s' % pkg)
+                self.logger.critical('Cannot remove package %s', pkg)
                 continue
             else:
-                self.log(7, 'Package %s removed' % pkg)
+                self.verbose_logger.log(logginglevels.DEBUG_4,
+                    'Package %s removed', pkg)
                 removed+=1
         
         msg = '%d packages removed' % removed
@@ -881,10 +878,11 @@
             try:
                 os.unlink(item)
             except OSError, e:
-                self.errorlog(0, 'Cannot remove sqlite cache file %s' % item)
+                self.logger.critical('Cannot remove sqlite cache file %s', item)
                 continue
             else:
-                self.log(7, 'Cache file %s removed' % item)
+                self.verbose_logger.log(logginglevels.DEBUG_4,
+                    'Cache file %s removed', item)
                 removed+=1
         msg = '%d cache files removed' % removed
         return 0, [msg]
@@ -904,10 +902,11 @@
             try:
                 os.unlink(item)
             except OSError, e:
-                self.errorlog(0, 'Cannot remove metadata file %s' % item)
+                self.logger.critical('Cannot remove metadata file %s', item)
                 continue
             else:
-                self.log(7, 'metadata file %s removed' % item)
+                self.verbose_logger.log(logginglevels.DEBUG_4,
+                    'metadata file %s removed', item)
                 removed+=1
         msg = '%d metadata files removed' % removed
         return 0, [msg]
@@ -954,11 +953,14 @@
                                                    ver=v, rel=r)
                 if len(matches) > 1:
                     updates.append(matches[0])
-                    self.log(4, 'More than one identical match in sack for %s' % matches[0])
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'More than one identical match in sack for %s', 
+                        matches[0])
                 elif len(matches) == 1:
                     updates.append(matches[0])
                 else:
-                    self.log(4, 'Nothing matches %s.%s %s:%s-%s from update' % (n,a,e,v,r))
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'Nothing matches %s.%s %s:%s-%s from update', n,a,e,v,r)
 
         # installed only
         elif pkgnarrow == 'installed':
@@ -1071,7 +1073,7 @@
         exactmatch, matched, unmatched = parsePackages(avail, pkgs)
 
         if len(unmatched) > 0:
-            self.errorlog(0, 'No Match for arguments: %s' % unmatched)
+            self.logger.critical('No Match for arguments: %s', unmatched)
 
         pkgs = misc.unique(exactmatch + matched)
         
@@ -1170,7 +1172,7 @@
         
         # search deps the simple way first
         for arg in args:
-            self.log(4, 'searching the simple way')
+            self.verbose_logger.log(logginglevels.DEBUG_1, 'searching the simple way')
             pkgs = self.returnPackagesByDep(arg)
             for po in pkgs:
                 if callback:
@@ -1179,7 +1181,8 @@
 
         # search pkgSack - fully populate the worthwhile metadata to search
         # if it even vaguely matches
-        self.log(4, 'fully populating the necessary data')
+        self.verbose_logger.log(logginglevels.DEBUG_1,
+            'fully populating the necessary data')
         for arg in args:
             matched = 0
             globs = ['.*bin\/.*', '.*\/etc\/.*', '^\/usr\/lib\/sendmail$']
@@ -1201,13 +1204,17 @@
             
             if hasattr(self.pkgSack, 'searchAll'):
                 if not re.match('.*[\*,\[,\],\{,\},\?,\+,\%].*', arg):
-                    self.log(4, 'Using the like search')
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'Using the like search')
                     where = self.pkgSack.searchAll(arg, query_type='like')
             
-            self.log(4, 'Searching %d packages' % len(where))
-            self.log(4,'refining the search expression of %s' % arg) 
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'Searching %d packages', len(where))
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'refining the search expression of %s', arg) 
             restring = self._refineSearchPattern(arg)
-            self.log(4, 'refined search: %s' % restring)
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'refined search: %s', restring)
             try: 
                 arg_re = re.compile(restring, flags=re.I)
             except sre_constants.error, e:
@@ -1215,16 +1222,19 @@
                   'Search Expression: %s is an invalid Regular Expression.\n' % arg
 
             for po in where:
-                self.log(5, 'searching package %s' % po)
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'searching package %s', po)
                 tmpvalues = []
                 
-                self.log(5, 'searching in file entries')
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'searching in file entries')
                 for filetype in po.returnFileTypes():
                     for fn in po.returnFileEntries(ftype=filetype):
                         if arg_re.search(fn):
                             tmpvalues.append(fn)
                 
-                self.log(5, 'searching in provides entries')
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'searching in provides entries')
                 for (p_name, p_flag, (p_e, p_v, p_r)) in po.returnPrco('provides'):
                     if arg_re.search(p_name):
                         prov = po.prcoPrintable((p_name, p_flag, (p_e, p_v, p_r)))
@@ -1340,7 +1350,9 @@
                     try:
                         txmbr.groups.remove(grpid)
                     except ValueError:
-                        self.log(4, "package %s was not marked in group %s" % (txmbr.po, grpid))
+                        self.verbose_logger.log(logginglevels.DEBUG_1,
+                            "package %s was not marked in group %s", txmbr.po,
+                            grpid)
                         continue
                     
                     # if there aren't any other groups mentioned then remove the pkg
@@ -1372,11 +1384,13 @@
         
         pkgs = thisgroup.mandatory_packages.keys() + thisgroup.default_packages.keys()
         for pkg in pkgs:
-            self.log(5, 'Adding package %s from group %s' % (pkg, thisgroup.groupid))
+            self.verbose_logger.log(logginglevels.DEBUG_2,
+                'Adding package %s from group %s', pkg, thisgroup.groupid)
             try:
                 txmbrs = self.install(name = pkg)
             except Errors.InstallError, e:
-                self.log(3, 'No package named %s available to be installed' % pkg)
+                self.verbose_logger.debug('No package named %s available to be installed',
+                    pkg)
             else:
                 txmbrs_used.extend(txmbrs)
                 for txmbr in txmbrs:
@@ -1426,7 +1440,9 @@
                     try: 
                         txmbr.groups.remove(grpid)
                     except ValueError:
-                        self.log(4, "package %s was not marked in group %s" % (txmbr.po, grpid))
+                        self.verbose_logger.log(logginglevels.DEBUG_1,
+                            "package %s was not marked in group %s", txmbr.po,
+                            grpid)
                         continue
                     
                     # if there aren't any other groups mentioned then remove the pkg
@@ -1717,7 +1733,8 @@
         tx_return = []
         for po in pkgs:
             if self.tsInfo.exists(pkgtup=po.pkgtup):
-                self.log(4, 'Package: %s  - already in transaction set' % po)
+                self.verbose_logger.log(logginglevels.DEBUG_1,
+                    'Package: %s  - already in transaction set', po)
                 tx_return.extend(self.tsInfo.getMembers(pkgtup=po.pkgtup))
                 continue
             
@@ -1730,7 +1747,7 @@
             # make sure it's not already installed
             if self.rpmdb.installed(name=po.name, arch=po.arch, epoch=po.epoch,
                     rel=po.rel, ver=po.ver):
-                self.errorlog(2, 'Package %s already installed and latest version' % po)
+                self.logger.warning('Package %s already installed and latest version', po)
                 continue
 
             
@@ -1779,7 +1796,7 @@
 
         tx_return = []
         if not po and not kwargs.keys(): # update everything (the easy case)
-            self.log(5, 'Updating Everything')
+            self.verbose_logger.log(logginglevels.DEBUG_2, 'Updating Everything')
             for (obsoleting, installed) in obsoletes:
                 obsoleting_pkg = self.getPackageObject(obsoleting)
                 hdr = self.rpmdb.returnHeaderByTuple(installed)[0]
@@ -1790,7 +1807,8 @@
                 
             for (new, old) in updates:
                 if self.tsInfo.isObsoleted(pkgtup=old):
-                    self.log(5, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s' % old)
+                    self.verbose_logger.log(logginglevels.DEBUG_2, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s', 
+                        old)
                 else:
                     updating_pkg = self.getPackageObject(new)
                     hdr = self.rpmdb.returnHeaderByTuple(old)[0]
@@ -1854,7 +1872,8 @@
                 if self.up.updating_dict.has_key(available_pkg.pkgtup):
                     updated = self.up.updating_dict[available_pkg.pkgtup][0]
                     if self.tsInfo.isObsoleted(updated):
-                        self.log(5, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s' % updated)
+                        self.verbose_logger.log(logginglevels.DEBUG_2, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s', 
+                            updated)
                     else:
                         hdr = self.rpmdb.returnHeaderByTuple(updated)[0]
                         updated_pkg =  YumInstalledPackage(hdr)
@@ -1866,7 +1885,8 @@
                     updating = self.up.updatesdict[installed_pkg.pkgtup][0]
                     updating_pkg = self.getPackageObject(updating)
                     if self.tsInfo.isObsoleted(installed_pkg.pkgtup):
-                        self.log(5, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s' % installed_pkg.pkgtup)
+                        self.verbose_logger.log(logginglevels.DEBUG_2, 'Not Updating Package that is already obsoleted: %s.%s %s:%s-%s', 
+                            installed_pkg.pkgtup)
                     else:
                         txmbr = self.tsInfo.addUpdate(updating_pkg, installed_pkg)
                         tx_return.append(txmbr)
@@ -1904,7 +1924,7 @@
 
         
         if len(pkgs) == 0: # should this even be happening?
-            self.errorlog(3, "No package matched to remove")
+            self.logger.warning("No package matched to remove")
 
         for po in pkgs:
             txmbr = self.tsInfo.addErase(po)
@@ -1970,7 +1990,7 @@
         key_installed = False
 
         for keyurl in keyurls:
-            self.log(1, 'Retrieving GPG key from %s' % keyurl)
+            self.logger.info('Retrieving GPG key from %s' % keyurl)
 
             # Go get the GPG key from the given URL
             try:
@@ -1992,12 +2012,12 @@
 
             # Check if key is already installed
             if misc.keyInstalled(self.read_ts, keyid, timestamp) >= 0:
-                self.errorlog(1, 'GPG key at %s (0x%s) is already installed' % (
+                self.logger.info('GPG key at %s (0x%s) is already installed' % (
                     keyurl, hexkeyid))
                 continue
 
             # Try installing/updating GPG key
-            self.log(1, 'Importing GPG key 0x%s "%s"' % (hexkeyid, userid))
+            self.logger.info('Importing GPG key 0x%s "%s"' % (hexkeyid, userid))
             rc = False
             if self.conf.assumeyes:
                 rc = True
@@ -2012,7 +2032,7 @@
             if result != 0:
                 raise yum.Errors.YumBaseError, \
                       'Key import failed (code %d)' % result
-            self.log(1, 'Key imported successfully')
+            self.logger.info('Key imported successfully')
             key_installed = True
 
             if not key_installed:

Index: depsolve.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- depsolve.py	28 May 2006 05:32:49 -0000	1.82
+++ depsolve.py	23 Jun 2006 14:26:17 -0000	1.83
@@ -18,6 +18,7 @@
 import os.path
 import re
 import types
+import logging
 
 import rpmUtils.transaction
 import rpmUtils.miscutils
@@ -29,11 +30,14 @@
 from Errors import DepError, RepoError, PackageSackError
 from constants import *
 import packages
+import logginglevels
 
 class Depsolve(object):
     def __init__(self):
         packages.base = self
         self.dsCallback = None
+        self.logger = logging.getLogger("yum.Depsolve")
+        self.verbose_logger = logging.getLogger("yum.verbose.Depsolve")
     
     def initActionTs(self):
         """sets up the ts we'll use for all the work"""
@@ -51,13 +55,14 @@
             if ts_flags_to_rpm.has_key(flag):
                 self.ts.addTsFlag(ts_flags_to_rpm[flag])
             else:
-                self.errorlog(0, 'Invalid tsflag in config file: %s' % flag)
+                self.logger.critical('Invalid tsflag in config file: %s', flag)
 
     def whatProvides(self, name, flags, version):
         """searches the packageSacks for what provides the arguments
            returns a ListPackageSack of providing packages, possibly empty"""
 
-        self.log(4, 'Searching pkgSack for dep: %s' % name)
+        self.verbose_logger.log(logginglevels.DEBUG_1, 'Searching pkgSack for dep: %s',
+            name)
         # we need to check the name - if it doesn't match:
         # /etc/* bin/* or /usr/lib/sendmail then we should fetch the 
         # filelists.xml for all repos to make the searchProvides more complete.
@@ -84,7 +89,8 @@
         defSack = ListPackageSack() # holder for items definitely providing this dep
         
         for po in pkgs:
-            self.log(5, 'Potential match for %s from %s' % (name, po))
+            self.verbose_logger.log(logginglevels.DEBUG_2,
+                'Potential match for %s from %s', name, po)
             if name[0] == '/' and r_v is None:
                 # file dep add all matches to the defSack
                 defSack.addPackage(po)
@@ -92,7 +98,7 @@
 
             if po.checkPrco('provides', (name, flags, (r_e, r_v, r_r))):
                 defSack.addPackage(po)
-                self.log(3, 'Matched %s to require for %s' % (po, name))
+                self.verbose_logger.debug('Matched %s to require for %s', po, name)
         
         return defSack
         
@@ -129,7 +135,7 @@
                 ts_elem[(pkginfo, mode)] = 1
                 
         for txmbr in self.tsInfo.getMembers():
-            self.log(6, 'Member: %s' % txmbr)
+            self.verbose_logger.log(logginglevels.DEBUG_3, 'Member: %s', txmbr)
             if txmbr.ts_state in ['u', 'i']:
                 if ts_elem.has_key((txmbr.pkgtup, 'i')):
                     continue
@@ -139,13 +145,15 @@
                 
                 if txmbr.ts_state == 'u':
                     if self.allowedMultipleInstalls(txmbr.po):
-                        self.log(5, '%s converted to install' % (txmbr.po))
+                        self.verbose_logger.log(logginglevels.DEBUG_2,
+                            '%s converted to install', txmbr.po)
                         txmbr.ts_state = 'i'
                         txmbr.output_state = TS_INSTALL
 
                 
                 self.ts.addInstall(hdr, (hdr, rpmfile), txmbr.ts_state)
-                self.log(4, 'Adding Package %s in mode %s' % (txmbr.po, txmbr.ts_state))
+                self.verbose_logger.log(logginglevels.DEBUG_1,
+                    'Adding Package %s in mode %s', txmbr.po, txmbr.ts_state)
                 if self.dsCallback: 
                     self.dsCallback.pkgAdded(txmbr.pkgtup, txmbr.ts_state)
             
@@ -156,7 +164,8 @@
                 for idx in indexes:
                     self.ts.addErase(idx)
                     if self.dsCallback: self.dsCallback.pkgAdded(txmbr.pkgtup, 'e')
-                    self.log(4, 'Removing Package %s' % txmbr.po)
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'Removing Package %s', txmbr.po)
         
 
     def resolveDeps(self):
@@ -185,7 +194,8 @@
             deps = unique(deps) # get rid of duplicate deps            
             if deps == depscopy:
                 unresolveableloop += 1
-                self.log(5, 'Identical Loop count = %d' % unresolveableloop)
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'Identical Loop count = %d', unresolveableloop)
                 if unresolveableloop >= 2:
                     errors.append('Unable to satisfy dependencies')
                     for deptuple in deps:
@@ -211,12 +221,13 @@
 
 
             # things to resolve
-            self.log (3, '# of Deps = %d' % len(deps))
+            self.verbose_logger.debug('# of Deps = %d', len(deps))
             depcount = 0
             for dep in deps:
                 ((name, version, release), (needname, needversion), flags, suggest, sense) = dep
                 depcount += 1
-                self.log(5, '\nDep Number: %d/%d\n' % (depcount, len(deps)))
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    '\nDep Number: %d/%d\n', depcount, len(deps))
                 if sense == rpm.RPMDEP_SENSE_REQUIRES: # requires
                     # if our packageSacks aren't here, then set them up
                     if not hasattr(self, 'pkgSack'):
@@ -228,7 +239,7 @@
                     (checkdep, missing, conflict, errormsgs) = self._processConflict(dep)
                     
                 else: # wtf?
-                    self.errorlog(0, 'Unknown Sense: %d' (sense))
+                    self.logger.critical('Unknown Sense: %d', sense)
                     continue
 
                 missingdep += missing
@@ -238,16 +249,16 @@
                     if error not in errors:
                         errors.append(error)
 
-            self.log(4, 'miss = %d' % missingdep)
-            self.log(4, 'conf = %d' % conflicts)
-            self.log(4, 'CheckDeps = %d' % CheckDeps)
+            self.verbose_logger.log(logginglevels.DEBUG_1, 'miss = %d', missingdep)
+            self.verbose_logger.log(logginglevels.DEBUG_1, 'conf = %d', conflicts)
+            self.verbose_logger.log(logginglevels.DEBUG_1, 'CheckDeps = %d', CheckDeps)
 
             if CheckDeps > 0:
                 if self.dsCallback: self.dsCallback.restartLoop()
-                self.log(4, 'Restarting Loop')
+                self.verbose_logger.log(logginglevels.DEBUG_1, 'Restarting Loop')
             else:
                 if self.dsCallback: self.dsCallback.end()
-                self.log(4, 'Dependency Process ending')
+                self.verbose_logger.log(logginglevels.DEBUG_1, 'Dependency Process ending')
 
             del deps
 
@@ -270,7 +281,8 @@
         ((name, version, release), (needname, needversion), flags, suggest, sense) = dep
         
         niceformatneed = rpmUtils.miscutils.formatRequire(needname, needversion, flags)
-        self.log(4, '%s requires: %s' % (name, niceformatneed))
+        self.verbose_logger.log(logginglevels.DEBUG_1, '%s requires: %s', name,
+            niceformatneed)
         
         if self.dsCallback: self.dsCallback.procReq(name, niceformatneed)
         
@@ -278,12 +290,14 @@
         pkgs = []
         dumbmatchpkgs = self.rpmdb.returnTupleByKeyword(name=name, ver=version, rel=release)
         for pkgtuple in dumbmatchpkgs:
-            self.log(6, 'Calling rpmdb.returnHeaderByTuple on %s.%s %s:%s-%s' % pkgtuple)
+            self.verbose_logger.log(logginglevels.DEBUG_3,
+                'Calling rpmdb.returnHeaderByTuple on %s.%s %s:%s-%s', pkgtuple)
             hdrs = self.rpmdb.returnHeaderByTuple(pkgtuple)
             for hdr in hdrs:
                 po = packages.YumInstalledPackage(hdr)
                 if self.tsInfo.exists(po.pkgtup):
-                    self.log(7, 'Skipping package already in Transaction Set: %s' % po)
+                    self.verbose_logger.log(logginglevels.DEBUG_4,
+                        'Skipping package already in Transaction Set: %s', po)
                     continue
                 if niceformatneed in po.requiresList():
                     pkgs.append(po)
@@ -293,26 +307,27 @@
             if len(txmbrs) < 1:
                 msg = 'Requiring package %s-%s-%s not in transaction set \
                                   nor in rpmdb' % (name, version, release)
-                self.log(4, msg)
+                self.verbose_logger.log(logginglevels.DEBUG_1, msg)
                 errormsgs.append(msg)
                 missingdep = 1
                 CheckDeps = 0
 
             else:
                 txmbr = txmbrs[0]
-                self.log(4, 'Requiring package is from transaction set')
+                self.verbose_logger.log(logginglevels.DEBUG_1,
+                    'Requiring package is from transaction set')
                 if txmbr.ts_state == 'e':
                     msg = 'Requiring package %s is set to be erased,' % txmbr.name +\
                            'probably processing an old dep, restarting loop early.'
-                    self.log(5, msg)
+                    self.verbose_logger.log(logginglevels.DEBUG_2, msg)
                     CheckDeps=1
                     missingdep=0
                     return (CheckDeps, missingdep, conflicts, errormsgs)
                     
                 else:
-                    self.log(4, 'Resolving for requiring package: %s-%s-%s in state %s' %
-                                (name, version, release, txmbr.ts_state))
-                    self.log(4, 'Resolving for requirement: %s' % 
+                    self.verbose_logger.log(logginglevels.DEBUG_1, 'Resolving for requiring package: %s-%s-%s in state %s',
+                        name, version, release, txmbr.ts_state)
+                    self.verbose_logger.log(logginglevels.DEBUG_1, 'Resolving for requirement: %s',
                         rpmUtils.miscutils.formatRequire(needname, needversion, flags))
                     requirementTuple = (needname, flags, needversion)
                     # should we figure out which is pkg it is from the tsInfo?
@@ -321,33 +336,39 @@
             
         if len(pkgs) > 0:  # requring tuple is in the rpmdb
             if len(pkgs) > 1:
-                self.log(5, 'Multiple Packages match. %s-%s-%s' % (name, version, release))
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'Multiple Packages match. %s-%s-%s', name, version, release)
                 for po in pkgs:
                     # if one of them is (name, arch) already in the tsInfo somewhere, 
                     # pop it out of the list
                     (n,a,e,v,r) = po.pkgtup
                     thismode = self.tsInfo.getMode(name=n, arch=a)
                     if thismode is not None:
-                        self.log(5, '   %s already in ts %s, skipping' % (po, thismode))
+                        self.verbose_logger.log(logginglevels.DEBUG_2,
+                            '   %s already in ts %s, skipping', po, thismode)
                         pkgs.remove(po)
                         continue
                     else:
-                        self.log(5, '   %s' % po)
+                        self.verbose_logger.log(logginglevels.DEBUG_2, '   %s',
+                                po)
                     
             if len(pkgs) == 1:
                 po = pkgs[0]
-                self.log(5, 'Requiring package is installed: %s' % po)
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    'Requiring package is installed: %s', po)
             
             if len(pkgs) > 0:
                 requiringPkg = pkgs[0] # take the first one, deal with the others (if there is one)
                                    # on another dep.
             else:
-                self.errorlog(1, 'All pkgs in depset are also in tsInfo, this is wrong and bad')
+                self.logger.error('All pkgs in depset are also in tsInfo, this is wrong and bad')
                 CheckDeps = 1
                 return (CheckDeps, missingdep, conflicts, errormsgs)
             
-            self.log(4, 'Resolving for installed requiring package: %s' % requiringPkg)
-            self.log(4, 'Resolving for requirement: %s' % 
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'Resolving for installed requiring package: %s', requiringPkg)
+            self.verbose_logger.log(logginglevels.DEBUG_1,
+                'Resolving for requirement: %s', 
                 rpmUtils.miscutils.formatRequire(needname, needversion, flags))
             
             requirementTuple = (needname, flags, needversion)
@@ -383,7 +404,7 @@
         providers = []
         
         if self.cheaterlookup.has_key((needname, needflags, needversion)):
-            self.log(5, 'Needed Require has already been looked up, cheating')
+            self.verbose_logger.log(logginglevels.DEBUG_2, 'Needed Require has already been looked up, cheating')
             cheater_tup = self.cheaterlookup[(needname, needflags, needversion)]
             providers = [cheater_tup]
         
@@ -393,13 +414,14 @@
                 providers.append(txmbr.pkgtup)
 
         else:
-            self.log(5, 'Needed Require is not a package name. Looking up: %s' % niceformatneed)
+            self.verbose_logger.log(logginglevels.DEBUG_2, 'Needed Require is not a package name. Looking up: %s', niceformatneed)
             providers = self.rpmdb.whatProvides(needname, needflags, needversion)
             
         for insttuple in providers:
             inst_str = '%s.%s %s:%s-%s' % insttuple
             (i_n, i_a, i_e, i_v, i_r) = insttuple
-            self.log(5, 'Potential Provider: %s' % inst_str)
+            self.verbose_logger.log(logginglevels.DEBUG_2,
+                'Potential Provider: %s', inst_str)
             thismode = self.tsInfo.getMode(name=i_n, arch=i_a, 
                             epoch=i_e, ver=i_v, rel=i_r)
                         
@@ -418,15 +440,16 @@
                 except KeyError:
                     needpo = self.getPackageObject(insttuple)
                 self.cheaterlookup[(needname, needflags, needversion)] = insttuple
-                self.log(5, 'Mode is %s for provider of %s: %s' % 
-                            (needmode, niceformatneed, inst_str))
+                self.verbose_logger.log(logginglevels.DEBUG_2, 'Mode is %s for provider of %s: %s',
+                    needmode, niceformatneed, inst_str)
                 break
                     
-        self.log(5, 'Mode for pkg providing %s: %s' % (niceformatneed, needmode))
+        self.verbose_logger.log(logginglevels.DEBUG_2, 'Mode for pkg providing %s: %s', 
+            niceformatneed, needmode)
         
         if needmode in ['e']:
-            self.log(5, 'TSINFO: %s package requiring %s marked as erase' %
-                            (requiringPo, needname))
+            self.verbose_logger.log(logginglevels.DEBUG_2, 'TSINFO: %s package requiring %s marked as erase',
+                requiringPo, needname)
             txmbr = self.tsInfo.addErase(requiringPo)
             txmbr.setAsDep(po=needpo)
             checkdeps = 1
@@ -438,7 +461,8 @@
             if self.conf.obsoletes:
                 if self.up.obsoleted_dict.has_key(requiringPo.pkgtup):
                     obslist = self.up.obsoleted_dict[requiringPo.pkgtup]
-                    self.log(4, 'Looking for Obsoletes for %s' % requiringPo)
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'Looking for Obsoletes for %s', requiringPo)
                 
             if len(obslist) > 0:
                 po = None
@@ -450,7 +474,8 @@
                             txmbr = self.tsInfo.addObsoleting(po, requiringPo)
                             self.tsInfo.addObsoleted(requiringPo, po)
                             txmbr.setAsDep(po=needpo)
-                            self.log(5, 'TSINFO: Obsoleting %s with %s to resolve dep.' % (requiringPo, po))
+                            self.verbose_logger.log(logginglevels.DEBUG_2, 'TSINFO: Obsoleting %s with %s to resolve dep.', 
+                                requiringPo, po)
                             checkdeps = 1
                             return checkdeps, missingdep 
                 
@@ -480,11 +505,11 @@
                     if po.pkgtup == new:
                         txmbr = self.tsInfo.addUpdate(po, requiringPo)
                         txmbr.setAsDep(po=needpo)
-                        self.log(5, 'TSINFO: Updating %s to resolve dep.' % po)
+                        self.verbose_logger.log(logginglevels.DEBUG_25, 'TSINFO: Updating %s to resolve dep.', po)
                 checkdeps = 1
                 
             else: # if there's no update then pass this over to requringFromTransaction()
-                self.log(5, 'Cannot find an update path for dep for: %s' % niceformatneed)
+                self.verbose_logger.log(logginglevels.DEBUG_2, 'Cannot find an update path for dep for: %s', niceformatneed)
                 
                 reqpkg = (name, ver, rel, None)
                 return self._requiringFromTransaction(reqpkg, requirement, errorlist)
@@ -495,7 +520,8 @@
             if hasattr(self, 'pkgSack'):
                 return self._requiringFromTransaction(reqpkg, requirement, errorlist)
             else:
-                self.log(5, 'Unresolveable requirement %s for %s' % (niceformatneed, reqpkg_print))
+                self.verbose_logger.log(logginglevels.DEBUG_2, 'Unresolveable requirement %s for %s',
+                    niceformatneed, reqpkg_print)
                 checkdeps = 0
                 missingdep = 1
 
@@ -538,7 +564,7 @@
 
         for pkg in provSack.returnPackages():
             if pkg.pkgtup in self.rpmdb.getPkgList(): # is it already installed?
-                self.log(5, '%s is in providing packages but it is already installed, removing.' % pkg)
+                self.verbose_logger.log(logginglevels.DEBUG_2, '%s is in providing packages but it is already installed, removing.', pkg)
                 provSack.delPackage(pkg)
                 continue
 
@@ -558,7 +584,7 @@
                     rc = rpmUtils.miscutils.compareEVR((e, v, r), (te, tv, tr))
                     if rc < 0:
                         msg = 'Potential resolving package %s has newer instance in ts.' % pkg
-                        self.log(5, msg)
+                        self.verbose_logger.log(logginglevels.DEBUG_2, msg)
                         provSack.delPackage(pkg)
                         continue
                 
@@ -569,7 +595,7 @@
                     rc = rpmUtils.miscutils.compareEVR((e, v, r), (de, dv, dr))
                     if rc < 0:
                         msg = 'Potential resolving package %s has newer instance installed.' % pkg
-                        self.log(5, msg)
+                        self.verbose_logger.log(logginglevels.DEBUG_2, msg)
                         provSack.delPackage(pkg)
                         continue
 
@@ -588,7 +614,8 @@
             pkgmode = self.tsInfo.getMode(name=n, arch=a, epoch=e, ver=v, rel=r)
             if pkgmode in ['i', 'u']:
                 self.doUpdateSetup()
-                self.log(5, '%s already in ts, skipping this one' % (n))
+                self.verbose_logger.log(logginglevels.DEBUG_2,
+                    '%s already in ts, skipping this one', n)
                 checkdeps = 1
                 return checkdeps, missingdep
         
@@ -620,11 +647,13 @@
         # FIXME - why can't we look up in the transaction set for the requiringPkg
         # and know what needs it that way and provide a more sensible dep structure in the txmbr
         if (best.name, best.arch) in self.rpmdb.getNameArchPkgList():
-            self.log(3, 'TSINFO: Marking %s as update for %s' % (best, name))
+            self.verbose_logger.debug('TSINFO: Marking %s as update for %s', best,
+                name)
             txmbr = self.tsInfo.addUpdate(best)
             txmbr.setAsDep()
         else:
-            self.log(3, 'TSINFO: Marking %s as install for %s' % (best, name))
+            self.verbose_logger.debug('TSINFO: Marking %s as install for %s', best,
+                name)
             txmbr = self.tsInfo.addInstall(best)
             txmbr.setAsDep()
 
@@ -683,7 +712,8 @@
                     po = None
 
         if po:
-            self.log(5, 'TSINFO: Updating %s to resolve conflict.' % po)
+            self.verbose_logger.log(logginglevels.DEBUG_2,
+                'TSINFO: Updating %s to resolve conflict.', po)
             txmbr = self.tsInfo.addUpdate(po)
             txmbr.setAsDep()
             CheckDeps = 1
@@ -691,7 +721,8 @@
         else:
             conf = rpmUtils.miscutils.formatRequire(needname, needversion, flags)
             CheckDeps, conflicts = self._unresolveableConflict(conf, name, errormsgs)
-            self.log(4, '%s conflicts: %s' % (name, conf))
+            self.verbose_logger.log(logginglevels.DEBUG_1, '%s conflicts: %s',
+                name, conf)
         
         return (CheckDeps, missingdep, conflicts, errormsgs)
 

Index: plugins.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/plugins.py,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- plugins.py	16 Jun 2006 15:10:40 -0000	1.29
+++ plugins.py	23 Jun 2006 14:26:17 -0000	1.30
@@ -18,6 +18,8 @@
 import imp
 import warnings
 import atexit
+import logging
+import logginglevels
 from constants import *
 import ConfigParser
 import config 
@@ -114,11 +116,13 @@
         self.base = base
         self.optparser = optparser
         self.cmdline = (None, None)
+        self.verbose_logger = logging.getLogger("yum.verbose.YumPlugins")
         if not types:
             types = ALL_TYPES
 
         if id(TYPE_INTERFACE) in [id(t) for t in types]:
-            self.base.log(2, 'Deprecated constant TYPE_INTERFACE during plugin '
+            self.verbose_logger.log(logginglevels.INFO_2,
+                    'Deprecated constant TYPE_INTERFACE during plugin '
                     'initialization.\nPlease use TYPE_INTERACTIVE instead.')
 
         self._importplugins(types)
@@ -141,8 +145,8 @@
         conduitcls = eval(conduitcls)       # Convert name to class object
 
         for modname, func in self._pluginfuncs[slotname]:
-            self.base.log(3, 'Running "%s" handler for "%s" plugin' % (
-                slotname, modname))
+            self.verbose_logger.debug('Running "%s" handler for "%s" plugin', slotname,
+                modname)
     
             _, conf = self._plugins[modname]
             func(conduitcls(self, self.base, conf, **kwargs))
@@ -174,7 +178,7 @@
         conf = self._getpluginconf(modname)
         if not conf or not config.getOption(conf, 'main', 'enabled', 
                 config.BoolOption(False)):
-            self.base.log(3, '"%s" plugin is disabled' % modname)
+            self.verbose_logger.debug('"%s" plugin is disabled', modname)
             return
 
         fp, pathname, description = imp.find_module(modname, [dir])
@@ -202,14 +206,15 @@
             return
         for plugintype in plugintypes:
             if id(plugintype) == id(TYPE_INTERFACE):
-                self.base.log(2, 'Plugin "%s" uses deprecated constant '
+                self.verbose_logger.log(logginglevels.INFO_2,
+                        'Plugin "%s" uses deprecated constant '
                         'TYPE_INTERFACE.\nPlease use TYPE_INTERACTIVE '
-                        'instead.' % modname)
+                        'instead.', modname)
 
             if plugintype not in types:
                 return
 
-        self.base.log(2, 'Loading "%s" plugin' % modname)
+        self.verbose_logger.log(logginglevels.INFO_2, 'Loading "%s" plugin', modname)
 
         # Store the plugin module and its configuration file
         if not self._plugins.has_key(modname):
@@ -250,7 +255,7 @@
             raise Errors.ConfigError("Couldn't parse %s: %s" % (conffilename,
                 str(e)))
         except IOError, e:
-            self.base.log(2, str(e))
+            self.verbose_logger.log(logginglevels.INFO_2, str(e))
             return None
 
         return parser
@@ -278,11 +283,16 @@
         self._base = base
         self._conf = conf
 
+        self.logger = logging.getLogger("yum.plugin")
+        self.verbose_logger = logging.getLogger("yum.verbose.plugin")
+
     def info(self, level, msg):
-        self._base.log(level, msg)
+        converted_level = logginglevels.logLevelFromDebugLevel(level)
+        self.verbose_logger.log(converted_level, msg)
 
     def error(self, level, msg):
-        self._base.errorlog(level, msg)
+        converted_level = logginglevels.logLevelFromErrorLevel(level)
+        self.logger.log(converted_level, msg)
 
     def promptYN(self, msg):
         self.info(2, msg)

Index: sqlitecache.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitecache.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- sqlitecache.py	8 Dec 2005 21:50:14 -0000	1.11
+++ sqlitecache.py	23 Jun 2006 14:26:17 -0000	1.12
@@ -22,6 +22,8 @@
 import sqlite
 import time
 import mdparser
+import logging
+import logginglevels
 from sqlitesack import encodefiletypelist,encodefilenamelist
 
 # This version refers to the internal structure of the sqlite cache files
@@ -40,6 +42,9 @@
         }
         self.repoid = repoid
         self.debug = 0
+        self.logger = logging.getLogger("yum.RepodataParserSqlite")
+        self.verbose_logger = \
+            logging.getLogger("yum.verbose.RepodataParserSqlite")
 
     def loadCache(self,filename):
         """Load cache from filename, check if it is valid and that dbversion 
@@ -56,8 +61,7 @@
 
         # Now check the database version
         if (info['dbversion'] != dbversion):
-            self.log(2, "Warning: cache file is version %s, we need %s, will regenerate" % (
-                info['dbversion'], dbversion))
+            self.verbose_logger.log(logginglevels.INFO_2, "Warning: cache file is version %s, we need %s, will regenerate", info['dbversion'], dbversion)
             raise sqlite.DatabaseError, "Older version of yum sqlite"
 
         # This appears to be a valid database, return checksum value and 
@@ -84,7 +88,8 @@
         # db should now contain a valid database object, check if it is
         # up to date
         if (checksum != dbchecksum):
-            self.log(3, "%s sqlite cache needs updating, reading in metadata" % (metadatatype))
+            self.verbose_logger.debug("%s sqlite cache needs updating, reading in metadata", 
+                metadatatype)
             parser = mdparser.MDParser(location)
             self.updateSqliteCache(db, parser, checksum, metadatatype)
         db.commit()
@@ -219,7 +224,7 @@
 
         # If it exists, remove it as we were asked to create a new one
         if (os.path.exists(filename)):
-            self.log(3, "Warning: cache already exists, removing old version")
+            self.verbose_logger.debug("Warning: cache already exists, removing old version")
             try:
                 os.unlink(filename)
             except OSError:
@@ -231,7 +236,7 @@
             f = open(filename,'w')
             db = sqlite.connect(filename) 
         except IOError:
-            self.log(1, "Warning could not create sqlite cache file, using in memory cache instead")
+            self.verbose_logger.log(logginglevels.INFO_1, "Warning could not create sqlite cache file, using in memory cache instead")
             db = sqlite.connect(":memory:")
 
         # The file has been created, now create the tables and indexes
@@ -375,8 +380,8 @@
         cur.execute("INSERT into db_info (dbversion,checksum) VALUES (%s,%s)",
                 (dbversion,checksum))
         db.commit()
-        self.log(2, "Added %s new packages, deleted %s old in %.2f seconds" % (
-                newcount, delcount, time.time()-t))
+        self.verbose_logger.log(logginglevels.INFO_2, "Added %s new packages, deleted %s old in %.2f seconds",
+            newcount, delcount, time.time()-t)
         return db
 
     def log(self, level, msg):




More information about the Yum-cvs-commits mailing list