[Tutor] Extending logging module
Kent Johnson
kent37 at tds.net
Thu Aug 9 21:40:21 CEST 2007
jay wrote:
> I have a working solution for this, based largely on what Kent posted.
> Thought I would post it for others in case your either curious, or need
> to do this in the future. There are probably other ways to do this.
>
> It works quite nicely, though its a lot of repeated
> code if you have to define several new levels.
Here is a *completely untested off-the-top-of-my-head* rewrite for
logging.addLevelName() that does this for you and saves having to repeat
the function definitions. Maybe this could be used to create the
standard logging functions too!
def addLevelName(level, levelName):
"""
Associate 'levelName' with 'level'.
This is used when converting levels to text during message formatting.
"""
import logging
_acquireLock()
try: #unlikely to cause an exception, but you never know...
_levelNames[level] = levelName
_levelNames[levelName] = level
lowerName = levelName.lower()
# define a new Logger function for the new level
# this is like existing info, critical, debug...etc
def Logger_func(self, msg, *args, **kwargs):
if self.manager.disable >= level:
return
if level >= self.getEffectiveLevel():
self._log(level, msg, args, **kwargs)
# Add the new function to the Logger class
setattr(logging.Logger, lowerName, Logger_func)
# define a new root level logging function
# this is like existing info, critical, debug...etc
def root_func(msg, *args, **kwargs):
if len(root.handlers) == 0:
basicConfig()
Logger_func(root, (msg,)+args, kwargs)
# make the root level function known
setattr(logging, lowerName, root_func)
finally:
_releaseLock()
Kent
More information about the Tutor
mailing list