We had quite similar problems in pyrpm.

James Antill wrote:
 So first off I'll try and list the problems with the current approach
to logging/output:

1. Function names are way to long, Eg.
self.verbose_logger.log(logginglevels.INFO_2, msg)
Passing a loggin level sucks - infoX and debugX (dbgX) is definetely the way to go.

2. We have 20 distinct levels/interfaces right now ... not including
"print".
Having a lot different level is not a problem per se but you need a policy how to assign them. Without a policy the levels are just useless. We always grouped 3 debug levels together to be used at a certain level of functions/methods. Toplevel methods debug1-3 (1 on toplevel, 2 for loop, 3 for nested loops) and debug4-6 for worker methods and debug7-9 for helper methods.

3. We don't cover the common cases well, for instance I think these
would be considered the common things you'd want:

i. quiet
ii. normal
iii. verbose
iv. debug (more in levels, sections or whatever).

...now IMO #iii is the biggest problem due to a bunch of debugging data
mixed in so isn't that usable/used.

Next thing that we came accross is that info and debug levels don't mix well. It turned out info and debug needed to be separate levels. Having a lot of info does not mean showing any debug messages and vice versa.

4. Almost everything goes off of
YumBase.logger/YumBase.verbose_logger ... except some parts of the code
which don't have access to a YumBase object.

Global debug settings turned out to be not that practical for a bigger project. To get around this we use a logger that can be turned on and off (switched to a given level) for modules, submodules, classes or methods - without telling every logging call where it is located. This is achieved by using black magic that involves - along other things - snake skin.

It also allows to add the location of the logging call to the message format string (e.g. module.class.method:lineno, filename:lineno, ...)

5. Also kind of related is that we don't have much in the way of good
output data utilities, for instance section headers.
Ehm, I don't get this...

Code can be found here:
http://www.jur-linux.org/git/?p=cvs-pyrpm.git;a=blob;f=pyrpm/logger.py;h=d171c420f63e84bcda1d68020b1cdb1868e29e6a;hb=master

Florian
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to