diff -ru --exclude=.hg --new-file pungi/pungi pungi_l/pungi
--- pungi/pungi	2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pungi	2007-07-11 17:24:41.000000000 +0200
@@ -83,6 +83,15 @@
 
     destdir = config.get('default', 'destdir')
 
+    if config.has_option('default', 'quiet'):logF=False
+    else:logF=True
+    config.set('default','quiet',str(not logF))
+    
+    # change logging defaults. 
+    logPath = os.path.join(config.get('default', 'destdir'), 
+        'logs/%s.%s.log' % (config.get('default', 'flavor'), config.get('default', 'arch')))
+    logger.changeDefaults(logPath=logPath, logF=logF)
+
     if not os.path.exists(destdir):
         try:
             os.makedirs(destdir)
diff -ru --exclude=.hg --new-file pungi/pypungi/gather.py pungi_l/pypungi/gather.py
--- pungi/pypungi/gather.py	2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/gather.py	2007-07-11 17:45:25.000000000 +0200
@@ -49,7 +49,6 @@
         #self.doSackSetup(arches)
         self.doSackSetup(archlist=arches) # work around temp break in yum api
         self.doSackFilelistPopulate()
-        self.logger = yum.logging.getLogger("yum.verbose.pungi")
         self.pkglist = pkglist
         self.polist = []
         self.srpmlist = []
@@ -59,19 +58,8 @@
         self.compsobj.add(self.config.get('default', 'comps'))
 
     def doLoggingSetup(self, debuglevel, errorlevel):
-        """Setup the logging facility."""
-
-
-        logdir = os.path.join(self.config.get('default', 'destdir'), 'logs')
-        if not os.path.exists(logdir):
-            os.makedirs(logdir)
-        if self.config.get('default', 'flavor'):
-            logfile = os.path.join(logdir, '%s.%s.log' % (self.config.get('default', 'flavor'),
-                                                          self.config.get('default', 'arch')))
-        else:
-            logfile = os.path.join(logdir, '%s.log' % (self.config.get('default', 'arch')))
-
-        yum.logging.basicConfig(level=yum.logging.DEBUG, filename=logfile)
+        # We want to use our own logger.
+        pass
 
     def doFileLogSetup(self, uid, logfile):
         # This function overrides a yum function, allowing pungi to control
@@ -99,8 +87,7 @@
            transaction info"""
 
 
-        if not self.config.has_option('default', 'quiet'):
-            self.logger.info('Checking deps of %s.%s' % (po.name, po.arch))
+        log.info('Checking deps of %s.%s' % (po.name, po.arch))
 
         reqs = po.requires
         provs = po.provides
@@ -116,15 +103,14 @@
 
             deps = self.whatProvides(r, f, v).returnPackages()
             if not deps:
-                self.logger.warn("Unresolvable dependency %s in %s.%s" % (r, po.name, po.arch))
+                log.warning("Unresolvable dependency %s in %s.%s" % (r, po.name, po.arch))
                 continue
 
             depsack = yum.packageSack.ListPackageSack(deps)
 
             for dep in depsack.returnNewestByNameArch():
                 self.tsInfo.addInstall(dep)
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Added %s.%s for %s.%s' % (dep.name, dep.arch, po.name, po.arch))
+                log.info('Added %s.%s for %s.%s' % (dep.name, dep.arch, po.name, po.arch))
            
             self.resolved_deps[req] = None
 
@@ -149,7 +135,7 @@
 
         # Check if we have the group
         if not self.compsobj.has_group(group):
-            self.logger.error("Group %s not found in comps!" % group)
+            log.error("Group %s not found in comps!" % group)
             return packages
 
         # Get the group object to work with
@@ -200,22 +186,18 @@
         for line in self.pkglist:
             line = line.strip()
             if line.startswith('#'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Skipping comment: %s' % line)
+                log.info('Skipping comment: %s' % line)
                 continue
             if line.startswith('@'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding group: %s' % line)
+                log.info('Adding group: %s' % line)
                 grouplist.append(line.strip('@'))
                 continue
             if line.startswith('-'):
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding exclude: %s' % line)
+                log.info('Adding exclude: %s' % line)
                 excludelist.append(line.strip('-'))
                 continue
             else:
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info('Adding package: %s' % line)
+                log.info('Adding package: %s' % line)
                 addlist.append(line)
 
         # First remove the excludes
@@ -244,12 +226,10 @@
         mysack = yum.packageSack.ListPackageSack(matches)
         for match in mysack.returnNewestByNameArch():
             self.tsInfo.addInstall(match)
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Found %s.%s' % (match.name, match.arch))
+            log.info('Found %s.%s' % (match.name, match.arch))
 
         for pkg in unmatched:
-            if not pkg in matchdict.keys():
-                self.logger.warn('Could not find a match for %s' % pkg)
+            log.warn('Could not find a match for %s' % pkg)
 
         if len(self.tsInfo) == 0:
             raise yum.Errors.MiscError, 'No packages found to download.'
@@ -287,7 +267,7 @@
             for pkg in self.polist:
                 downloads.append('%s.%s' % (pkg.name, pkg.arch))
                 downloads.sort()
-            self.logger.info("Download list: %s" % downloads)
+            log.info("Download list: %s" % downloads)
 
         # Package location within destdir, name subject to change/config
         pkgdir = os.path.join(self.config.get('default', 'destdir'), self.config.get('default', 'version'), 
@@ -306,8 +286,7 @@
             local = os.path.join(self.config.get('default', 'cachedir'), local)
             if os.path.exists(local) and self.verifyCachePkg(pkg, local):
 
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info("%s already exists and appears to be complete" % local)
+                log.info("%s already exists and appears to be complete" % local)
                 target = os.path.join(pkgdir, os.path.basename(remote))
                 if os.path.exists(target):
                     os.remove(target) # avoid traceback after interrupted download
@@ -316,8 +295,7 @@
 
             # Disable cache otherwise things won't download
             repo.cache = 0
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Downloading %s' % os.path.basename(remote))
+            log.info('Downloading %s' % os.path.basename(remote))
             pkg.localpath = local # Hack: to set the localpath to what we want.
 
             # do a little dance for file:// repos...
@@ -371,20 +349,16 @@
             local = os.path.basename(remote)
             local = os.path.join(self.config.get('default', 'cachedir'), local)
             if os.path.exists(local) and self.verifyCachePkg(pkg, local):
-
-                if not self.config.has_option('default', 'quiet'):
-                    self.logger.info("%s already exists and appears to be complete" % local)
+                log.info("%s already exists and appears to be complete" % local)
                 if os.path.exists(os.path.join(pkgdir, os.path.basename(remote))) and self.verifyCachePkg(pkg, os.path.join(pkgdir, os.path.basename(remote))):
-                    if not self.config.has_option('default', 'quiet'):
-                        self.logger.info("%s already exists in tree and appears to be complete" % local)
+                    log.info("%s already exists in tree and appears to be complete" % local)
                 else:
                     os.link(local, os.path.join(pkgdir, os.path.basename(remote)))
                 continue
 
             # Disable cache otherwise things won't download
             repo.cache = 0
-            if not self.config.has_option('default', 'quiet'):
-                self.logger.info('Downloading %s' % os.path.basename(remote))
+            log.info('Downloading %s' % os.path.basename(remote))
             pkg.localpath = local # Hack: to set the localpath to what we want.
 
             # do a little dance for file:// repos...
diff -ru --exclude=.hg --new-file pungi/pypungi/__init__.py pungi_l/pypungi/__init__.py
--- pungi/pypungi/__init__.py	2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/__init__.py	2007-07-11 17:23:30.000000000 +0200
@@ -0,0 +1,23 @@
+#!/usr/bin/python -tt
+# 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; version 2 of the License.
+#
+# 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.
+#
+
+# After importing any modules from pypungi two elements are added to the
+# __builtin__ variable: log and Pungilog object.
+# log : used as a logging object (log.debug("message")
+# Pungilog object: used to change the behavior of log.
+
+from logger import Logger
+
+Logger()#Pungi log object
diff -ru --exclude=.hg --new-file pungi/pypungi/logger.py pungi_l/pypungi/logger.py
--- pungi/pypungi/logger.py	1970-01-01 01:00:00.000000000 +0100
+++ pungi_l/pypungi/logger.py	2007-07-11 17:24:31.000000000 +0200
@@ -0,0 +1,69 @@
+#!/usr/bin/python -tt
+# 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; version 2 of the License.
+#
+# 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.
+#
+
+import logging
+import os.path
+import os
+import __builtin__
+
+class Logger:
+    """Class to manage the pungi log
+    
+    Once the pypungi module is imported the class is initialized with default values.
+    The user can use it just by typing log.####("message").  This will automatically
+    log stuff to the default file.
+    If the user wants to change the defaults he must call the pypungi.pungiLogO.chengeDefaults.
+    """
+    __logPath="/srv/pungi/pungi.log"
+    __logF=True 
+    __level=logging.DEBUG
+
+    def __init__(self,logPath=__logPath, logF=__logF, level=__level):
+        """ Initialize the logger.
+    
+        logPath - is the path to the file.
+        logF - Log to file.
+        level - the level of debuging
+        """
+
+        self.createLogger(logPath, logF, level)
+        #Add the log as log
+        __builtin__.log = self.log
+        #Add the ogject as logger
+        __builtin__.logger = self
+
+    def changeDefaults(self, logPath=__logPath, logF=__logF, level=__level):
+        # remove all trace from previous filehandler.
+        self.log.removeHandler(self.fileHandler)
+        if logPath !=self.__logPath : os.remove(self.__logPath)
+        self.createLogger(logPath, logF, level)
+
+        __builtin__.log = self.log
+
+    def createLogger(self, logPath=__logPath, logF=__logF, level=__level):
+        self.log = logging.getLogger("pungi")
+        if logF:
+            if not os.path.exists(os.path.split(logPath)[0]):
+                os.makedirs(os.path.split(logPath)[0])
+            self.fileHandler = logging.FileHandler(logPath)
+            self.fileHandler.setLevel(level)
+            
+            formatter = logging.Formatter('%(name)s-%(levelno)s-%(funcName)s : %(message)s')
+            self.fileHandler.setFormatter(formatter)
+        
+            self.log.addHandler(self.fileHandler) 
+            self.log.setLevel(logging.DEBUG)
+        else:
+            self.log.disabled=1
diff -ru --exclude=.hg --new-file pungi/pypungi/pungi.py pungi_l/pypungi/pungi.py
--- pungi/pypungi/pungi.py	2007-07-11 14:53:29.000000000 +0200
+++ pungi_l/pypungi/pungi.py	2007-07-11 17:43:44.000000000 +0200
@@ -13,7 +13,6 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 import subprocess
-import logging
 import os
 import sys
 sys.path.append('/usr/lib/anaconda-runtime')
@@ -21,8 +20,6 @@
 import shutil
 import re
 
-log = logging.getLogger("pypungi.pungi")
-
 class Pungi:
     def __init__(self, config):
         self.config = config
