Overriding a global

Roy Smith roy at panix.com
Sat Dec 10 15:47:54 EST 2011


I've got a code pattern I use a lot.  In each module, I create a logger 
for the entire module and log to it all over:

logger = logging.getLogger('my.module.name')

class Foo:
   def function(self):
      logger.debug('stuff')
      logger.debug('other stuff')

and so on.  This works, but every once in a while I decide that a 
particular function needs a more specific logger, so I can adjust the 
logging level for that function independent of the rest of the module.  
What I really want to do is:

   def function(self):
      logger = logger.getChild('function')
      logger.debug('stuff')
      logger.debug('other stuff')

which lets me not have to change any lines of code other than inserting 
the one to redefine logger.  Unfortunately, that's not legal Python (it 
leads to "UnboundLocalError: local variable 'logger' referenced before 
assignment").

Any ideas on the best way to implement this?



More information about the Python-list mailing list