----- Original Message ----- > From: "tim lauridsen" <tim.lauridsen@xxxxxxxxx> > To: "Yellowdog Updater, Modified" <yum@xxxxxxxxxxxxxxxxx> > Sent: Friday, September 14, 2012 8:22:17 AM > Subject: Re: [python API] logging > > On Wed, Sep 12, 2012 at 9:40 PM, Alon Bar-Lev < alonbl@xxxxxxxxxx > > wrote: > > > Hello All, > > I am trying to use yum via python. > > It is great apart of one issue I would like to discuss - logging. > > Going over the sources I see a lot of logs. > > At least: > > 'yum', 'yum.Depsolve', 'yum.RepoStorage', 'yum.Repos', > 'yum.YumBase', 'yum.filelogging', > 'yum.filelogging.RPMInstallCallback' > 'yum.plugin', 'yum.verbose', > 'yum.verbose.Depsolve', > 'yum.verbose.ProcessTrasactionBaseCallback', 'yum.verbose.Repos', > 'yum.verbose.YumPlugins', 'yum.verbose.plugin', > 'yum.verbose.YumBase' > > Having so much logs is great, however the yum implementation lazy > initialize the logs as objects are constructed. This override any > setting I may have for these logs. Especially the stdout, stderr > setting. > > My mission is to use yum pragmatically an write my own logging, thus > writing even a single message to stdout/stderr breaks the entire > application. > > Another issue is the large number of logs - as in python the log must > be explicitly initialized, meaning it is not enough to initialize > the 'yum' log to have effect on all the other logs. > So even if explicit logs are properly initialize as application > evolves it can add new logs, which will break the application. > > What I suggest is to add a logging object that will initialize all > logging for the application at yumbase constructor, then user may > override the settings as desired. > > The logging object will also hold a list of all available logs, so > implementation can know what logs are available for configuration. > > Maybe I missed some feature within the library... I will be happy to > know. > > Thoughts? > Alon. > > > http://docs.python.org/library/logging.html > > > Take a look at the propagate attribute to Logger class > setting it to False, will do what you want > > > just use 'yum' as logroot and it will get all yum logging. > > > Check this yumex code for examples for how to create a logger there > shows output in a gtk.Textview Hello Tim Thank you so much for your help! The propagate is good, but as root loggers set their own handlers there is a need to to setup at least two: 'yum', 'rhsm'... and in future any new one... However, even if I catch all logs, I still end up with the following in stdout: --- for l in ('yum', 'rhsm'): log = logging.getLogger(l) log.propagate = False log.handlers = [] log.addHandler(miniyum._yumlogger._loghandler(this._output --- --- Loaded plugins: product-id, rhnplugin Repository rhel-source is listed more than once in the configuration Repository rhel-source-beta is listed more than once in the configuration Freeing read locks for locker 0x1b: 1242/139773667890944 Freeing read locks for locker 0x1d: 1242/139773667890944 Freeing read locks for locker 0x1e: 1242/139773667890944 Freeing read locks for locker 0x1f: 1242/139773667890944 Freeing read locks for locker 0x20: 1242/139773667890944 Freeing read locks for locker 0x21: 1242/139773667890944 Freeing read locks for locker 0x22: 1242/139773667890944 warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release No package matched to remove: cman Package qemu-kvm-tools is obsoleted by qemu-kvm-rhev-tools, trying to install 2:qemu-kvm-rhev-tools-0.12.1.2-2.295.el6_3.2.x86_64 instead --- So I had to put my own Logger class to ignore 'yum', 'rhsm'... Not sure why the propagate does not work correctly. --- def addHandler(self, hdlr): if self.name.startswith('yum') or self.name.startswith('rhsm'): logging.Logger.handlers = [] logging.Logger.addHandler( self, myhandler ) else: logging.Logger.addHandler(self, hdlr) --- Now, I left with: --- Freeing read locks for locker 0x1b: 1242/139773667890944 Freeing read locks for locker 0x1d: 1242/139773667890944 Freeing read locks for locker 0x1e: 1242/139773667890944 Freeing read locks for locker 0x1f: 1242/139773667890944 Freeing read locks for locker 0x20: 1242/139773667890944 Freeing read locks for locker 0x21: 1242/139773667890944 Freeing read locks for locker 0x22: 1242/139773667890944 warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY --- So I had to dup /dev/null to stdout, stderr during YumBase.process() to cut the above messages as well, as I could not find where these are coming out from, and almost sure that there are other surprises. I think that like in Java, an API should not set its own handlers... and make sure there is no output unless explicitly registered. Thanks, Alon _______________________________________________ Yum mailing list Yum@xxxxxxxxxxxxxxxxx http://lists.baseurl.org/mailman/listinfo/yum