On Sun, 19 Sep 2010 02:35:15 +1000, Lie Ryan wrote: > I was expecting this to work: > > import logging > logger = logging.getLogger(__name__) > logger.warn('this is a warning') > > instead it produced the error: > > No handlers could be found for logger "__main__" > > > However, if instead I do: > > import logging > logging.warn('creating logger') > logger = logging.getLogger(__name__) > logger.warn('this is a warning') > > then it does work. > > Is there any reason why getLogger()-created logger shouldn't > automatically create a default handler?
Hello Lie, Calling logging.warn(), or logging.debug() etc. before handlers have been assigned to the root logger will result in logging.basicConfig() being called automatically. By default a StreamHandler will be created on the root logger and your logger inherits the StreamHandler. So you can avoid the "No handlers..." warning by calling logging.basicConfig() before your program does any logging. I don't know why getLogger() doesn't so something similar when it's called. Perhaps so that the logger is explicitly initialised with basic, file or dictConfig? Cheers, Kev -- http://mail.python.org/mailman/listinfo/python-list