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 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor