Hello, I'm trying to add logging to a module that gets imported by another module. But I only get it to work right if the imported module knows the name of the importing module. The example given in the "Logging Cookbook" also rely on this fact.
https://docs.python.org/3/howto/logging-cookbook.html#logging-cookbook I couldn't find any information on how to implement logging in a library that doesn't know the name of the application that uses it. How is that done? Here's some example code consisting of the main module foo.py and imported modules bar.py and baz.py ### foo.py import logging import bar, baz formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch = logging.StreamHandler() ch.setFormatter(formatter) logger = logging.getLogger('foo') logger.addHandler(ch) logger.setLevel(logging.DEBUG) logger.debug('debug from <%s>', __name__) logger.info('info from <%s>', __name__) logger.warning('warning from <%s>', __name__) logger.error('error from <%s>', __name__) bar.func() baz.func() ### bar.py '''This "generic" approach doesn't honor loglevel or formats when imported by another module''' import logging l = logging.getLogger(__name__) def func(): l.debug('debug from <%s>', __name__) l.info('info from <%s>', __name__) l.warning('warning from <%s>', __name__) l.error('error from <%s>', __name__) ### baz.py '''This only works if the importing module is named 'foo', which precludes its use as a library module''' import logging l = logging.getLogger('foo.baz') def func(): l.debug('debug from <%s>', __name__) l.info('info from <%s>', __name__) l.warning('warning from <%s>', __name__) l.error('error from <%s>', __name__) -- https://mail.python.org/mailman/listinfo/python-list